Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop
This commit is contained in:
commit
acf3d24db0
154 files changed
+70460
-17584
No files matched your search
+2
-2
@@ -12,12 +12,12 @@ exports.newNetworkRoot = function newNetworkRoot() {
|
||||
|
||||
async function run() {
|
||||
/*
|
||||
The NT object is accesible everywhere at the Superalgos Network.
|
||||
The NT object is accessible everywhere at the Superalgos Network.
|
||||
It provides access to all modules built for this Network.
|
||||
*/
|
||||
global.NT = {}
|
||||
/*
|
||||
The SA object is accesible everywhere at the Superalgos Network.
|
||||
The SA object is accessible everywhere at the Superalgos Network.
|
||||
It provides access to all modules built for Superalgos in general.
|
||||
*/
|
||||
global.SA = {}
|
||||
|
||||
@@ -295,7 +295,7 @@ exports.newGithubServer = function newGithubServer() {
|
||||
let fileContent // File content of the only file at the PR
|
||||
let userProfile // User Profile Object
|
||||
let githubUsername // The Github user name of who is submitting the Pull Request
|
||||
let mergeResponse // The response received from the call to Gihub to merge the Pull Request
|
||||
let mergeResponse // The response received from the call to Github to merge the Pull Request
|
||||
|
||||
if (await validatePrHasMoreThanOneFile() === false) { continue }
|
||||
if (await validateFileNameEqualsGithubUsername() === false) { continue }
|
||||
@@ -310,7 +310,7 @@ exports.newGithubServer = function newGithubServer() {
|
||||
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 {
|
||||
console.log('[INFO] Github Server -> mergeGithubPullRequests -> Merge Succed -> Pull Request "' + pullRequest.title + '" successfully merged. -> mergeResponse.message = ' + mergeResponse.data.message)
|
||||
console.log('[INFO] Github Server -> mergeGithubPullRequests -> Merge Succeed -> Pull Request "' + pullRequest.title + '" successfully merged. -> mergeResponse.message = ' + mergeResponse.data.message)
|
||||
await PL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME)
|
||||
await octokit.rest.issues.createComment({
|
||||
owner: owner,
|
||||
@@ -743,7 +743,7 @@ exports.newGithubServer = function newGithubServer() {
|
||||
owner: owner,
|
||||
repo: repo,
|
||||
issue_number: pullRequest.number,
|
||||
body: 'Hi, this is the Superalgos Governance System taking notice that you have submitted a pull request directly to the master branch.\n\nThanks for submitting a PR to the Superalgos Project. We value every contribution and everyone is welcome to send PRs. Unfortunatelly we are not merging pull requests directly into the master branch. Consider resubmitting to the develop branch intstead. For your convinienve, you can swithch branches from within the app, at the footer of the Docs tab. \n\n I will close this pull request now and look forward for your next contribution either to the develop branch or any other branch available for this purpose.'
|
||||
body: 'Hi, this is the Superalgos Governance System taking notice that you have submitted a pull request directly to the master branch.\n\nThanks for submitting a PR to the Superalgos Project. We value every contribution and everyone is welcome to send PRs. Unfortunately we are not merging pull requests directly into the master branch. Consider resubmitting to the develop branch instead. For your convenience, you can switch branches from within the app, at the footer of the Docs tab. \n\n I will close this pull request now and look forward for your next contribution either to the develop branch or any other branch available for this purpose.'
|
||||
});
|
||||
|
||||
await PL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME)
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
const {graphql} = require("@octokit/graphql");
|
||||
exports.newHttpInterface = function newHttpInterface() {
|
||||
|
||||
/*
|
||||
@@ -252,7 +253,7 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
}
|
||||
|
||||
console.log('[INFO] httpInterface -> Webhook -> Fetch-Messages -> Exchange-Market = ' + exchange + '-' + market)
|
||||
console.log('[INFO] httpInterface -> Webhook -> Fetch-Messages -> Messeges Fetched by Webhooks Sensor Bot = ' + webhookMessages.length)
|
||||
console.log('[INFO] httpInterface -> Webhook -> Fetch-Messages -> Messages Fetched by Webhooks Sensor Bot = ' + webhookMessages.length)
|
||||
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(webhookMessages), httpResponse)
|
||||
webhookMessages = []
|
||||
@@ -300,7 +301,7 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
|
||||
console.log('[INFO] httpInterface -> Webhook -> New-Message -> Exchange-Market = ' + exchange + '-' + market)
|
||||
console.log('[INFO] httpInterface -> Webhook -> New-Message -> messageReceived = ' + messageReceived)
|
||||
console.log('[INFO] httpInterface -> Webhook -> New-Message -> Messeges waiting to be Fetched by Webhooks Sensor Bot = ' + webhookMessages.length)
|
||||
console.log('[INFO] httpInterface -> Webhook -> New-Message -> Messages waiting to be Fetched by Webhooks Sensor Bot = ' + webhookMessages.length)
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(global.DEFAULT_OK_RESPONSE), httpResponse)
|
||||
}
|
||||
break
|
||||
@@ -880,7 +881,7 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
if (error === undefined) {
|
||||
// Run node setup to prepare instance for branch change
|
||||
await runNodeSetup()
|
||||
// Return to UI that Branch is suggessfully changed
|
||||
// Return to UI that Branch is successfully changed
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(global.DEFAULT_OK_RESPONSE), httpResponse)
|
||||
} else {
|
||||
let docs = {
|
||||
@@ -1027,7 +1028,7 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
|
||||
case 'FixAppSchema': {
|
||||
/*
|
||||
We will use this process when we have moved APP SCHEMA files from one project to another, and we need to fixt the
|
||||
We will use this process when we have moved APP SCHEMA files from one project to another, and we need to fix the
|
||||
actions where this node was referenced, so that it points to the new project where the node has moved to.
|
||||
*/
|
||||
let customResponse = {
|
||||
@@ -1128,7 +1129,7 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
let fileProject = allAppSchemasFileProjects[i]
|
||||
//console.log(fileProject, project)
|
||||
if (fileProject === project) {
|
||||
/* If the projec of the file is the same as the project found, then we consider this a match*/
|
||||
/* If the project of the file is the same as the project found, then we consider this a match*/
|
||||
hits = 1
|
||||
continue
|
||||
}
|
||||
@@ -1324,7 +1325,13 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
const title = 'Contribution: ' + mess
|
||||
const path = 'Projects/Governance/Plugins/User-Profiles/' + username + '.json' ;
|
||||
|
||||
const sha = await getSHA(path, octokit);
|
||||
const sha = await getSHA(path);
|
||||
|
||||
if (sha === undefined){
|
||||
console.log('***** Abort GOV.USERPROFILE *****')
|
||||
return
|
||||
}
|
||||
|
||||
let file = await SA.projects.communityPlugins.utilities.plugins.getPluginFileContent(
|
||||
'Governance',
|
||||
'User-Profiles',
|
||||
@@ -1384,35 +1391,60 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
async function getSHA(path, octokit) {
|
||||
async function getSHA(path) {
|
||||
let sha = ''
|
||||
const { graphql } = SA.nodeModules.graphql
|
||||
|
||||
try{
|
||||
const result = await octokit.repos.getContent({
|
||||
owner: username,
|
||||
repo: "Superalgos",
|
||||
path,
|
||||
ref: currentBranch
|
||||
});
|
||||
sha = result.data.sha
|
||||
|
||||
const { repository } = await graphql(
|
||||
'{ ' +
|
||||
' repository(name: "SuperAlgos", owner: "' + username + '") {' +
|
||||
' object(expression: "develop:' + path +'") {' +
|
||||
' ... on Blob {' +
|
||||
' oid' +
|
||||
' }' +
|
||||
' }' +
|
||||
' name' +
|
||||
' }' +
|
||||
'}',
|
||||
{
|
||||
headers: {
|
||||
authorization: 'token ' + token
|
||||
},
|
||||
}
|
||||
)
|
||||
|
||||
if (repository.name === undefined){
|
||||
console.log('***** Token permission needed : User:READ *****')
|
||||
sha = undefined
|
||||
error = '***** Token permission needed : User:READ *****'
|
||||
return sha
|
||||
}
|
||||
|
||||
if(repository.object === null ){
|
||||
console.log("[User Not Found] -> Creating new user")
|
||||
return sha
|
||||
}
|
||||
sha = repository.object.oid
|
||||
return sha
|
||||
|
||||
} catch (err) {
|
||||
if (err.message === 'Not Found') {
|
||||
console.log("[User Not Found] -> Creating new user")
|
||||
return sha
|
||||
} else {
|
||||
console.log('[ERROR] httpInterface -> Gov -> contributeUserProfile -> doGithub -> Method call produced an error.')
|
||||
console.log('[ERROR] httpInterface -> Gov -> contributeUserProfile -> doGithub -> err.stack = ' + err.stack)
|
||||
console.log('[ERROR] httpInterface -> Gov -> contributeUserProfile -> doGithub -> commitMessage = ' + mess)
|
||||
console.log('[ERROR] httpInterface -> Gov -> contributeUserProfile -> doGithub -> username = ' + username)
|
||||
console.log('[ERROR] httpInterface -> Gov -> contributeUserProfile -> doGithub -> token starts with = ' + token.substring(0, 10) + '...')
|
||||
console.log('[ERROR] httpInterface -> Gov -> contributeUserProfile -> doGithub -> token ends with = ' + '...' + token.substring(token.length - 10))
|
||||
console.log('[ERROR] httpInterface -> Gov -> contributeUserProfile -> doGithub -> currentBranch = ' + currentBranch)
|
||||
console.log('[ERROR] httpInterface -> Gov -> contributeUserProfile -> doGithub -> contributionsBranch = ' + contributionsBranch)
|
||||
return sha
|
||||
}
|
||||
|
||||
console.log('[ERROR] httpInterface -> Gov -> contributeUserProfile -> doGithub -> Method call produced an error.')
|
||||
console.log('[ERROR] httpInterface -> Gov -> contributeUserProfile -> doGithub -> err.stack = ' + err.stack)
|
||||
console.log('[ERROR] httpInterface -> Gov -> contributeUserProfile -> doGithub -> commitMessage = ' + mess)
|
||||
console.log('[ERROR] httpInterface -> Gov -> contributeUserProfile -> doGithub -> username = ' + username)
|
||||
console.log('[ERROR] httpInterface -> Gov -> contributeUserProfile -> doGithub -> token starts with = ' + token.substring(0, 10) + '...')
|
||||
console.log('[ERROR] httpInterface -> Gov -> contributeUserProfile -> doGithub -> token ends with = ' + '...' + token.substring(token.length - 10))
|
||||
console.log('[ERROR] httpInterface -> Gov -> contributeUserProfile -> doGithub -> currentBranch = ' + currentBranch)
|
||||
console.log('[ERROR] httpInterface -> Gov -> contributeUserProfile -> doGithub -> contributionsBranch = ' + contributionsBranch)
|
||||
return sha
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1780,7 +1812,7 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
let folder = unescape(requestPath[3])
|
||||
let fileName = unescape(requestPath[4])
|
||||
|
||||
/*Beta 12 Refactoring Code: Remove this before realeasing beta 12.*/
|
||||
/*Beta 12 Refactoring Code: Remove this before releasing beta 12.*/
|
||||
if (fileName === 'Superalgos-CL.json') {
|
||||
fileName = 'Superalgos-PL.json'
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ function newFrame() {
|
||||
let thisObject = {
|
||||
type: 'Rectangle',
|
||||
containerName: '', // This is for debugging purposes only.
|
||||
parentFrame: undefined, // Here we store the parent cointainer zoom object.
|
||||
parentFrame: undefined, // Here we store the parent container zoom object.
|
||||
radius: 0,
|
||||
offset: undefined,
|
||||
position: undefined,
|
||||
@@ -53,7 +53,7 @@ function newFrame() {
|
||||
}
|
||||
|
||||
function isInViewPort() {
|
||||
/* This function is usefull to know if the object who has this frame is currently appearing at least in part at the UI.projects.foundations.spaces.chartingSpace.viewport */
|
||||
/* This function is useful to know if the object who has this frame is currently appearing at least in part at the UI.projects.foundations.spaces.chartingSpace.viewport */
|
||||
|
||||
point1 = {
|
||||
x: 0,
|
||||
@@ -78,7 +78,7 @@ function newFrame() {
|
||||
}
|
||||
|
||||
function isCenterInViewPort() {
|
||||
/* This function is usefull to know if the object who has this frame is currently appearing at least in part at the UI.projects.foundations.spaces.chartingSpace.viewport */
|
||||
/* This function is useful to know if the object who has this frame is currently appearing at least in part at the UI.projects.foundations.spaces.chartingSpace.viewport */
|
||||
|
||||
point1 = {
|
||||
x: thisObject.width * 40 / 100,
|
||||
@@ -187,8 +187,8 @@ function newFrame() {
|
||||
}
|
||||
|
||||
function isThisPointHere(point, outsideViewPort, dontTransform, padding) {
|
||||
// The second parameter is usefull when you want to check a point that you already know is outside the viewport.
|
||||
// The padding is a distance to the borders of the container. Can be either negative (outside, to increase the cointainer size) or positive (inside to decrease the cointainer size)
|
||||
// The second parameter is useful when you want to check a point that you already know is outside the viewport.
|
||||
// The padding is a distance to the borders of the container. Can be either negative (outside, to increase the container size) or positive (inside to decrease the cointainer size)
|
||||
|
||||
if (padding === undefined) { padding = 0 }
|
||||
|
||||
@@ -199,7 +199,7 @@ function newFrame() {
|
||||
}
|
||||
|
||||
/* The point received is on the screen coordinates system, which already has zoom and displacement applied. We need to remove the zoom and displacement
|
||||
in order to have the point on the containers coordinate system and be able to compare it with its dimmensions. */
|
||||
in order to have the point on the containers coordinate system and be able to compare it with its dimensions. */
|
||||
if (dontTransform === false || dontTransform === undefined) {
|
||||
if (outsideViewPort === true) {
|
||||
checkPoint = thisObject.container.frame.unframeThisPoint(checkPoint)
|
||||
@@ -208,7 +208,7 @@ function newFrame() {
|
||||
}
|
||||
}
|
||||
|
||||
/* Now we check if the resulting point is whin the current Frame. */
|
||||
/* Now we check if the resulting point is within the current Frame. */
|
||||
if (isNaN(checkPoint.x) || isNaN(checkPoint.y)) { return false }
|
||||
if (thisObject.type === 'Circle') {
|
||||
let distance = Math.sqrt(Math.pow(thisObject.position.x - checkPoint.x, 2) + Math.pow(thisObject.position.y - checkPoint.y, 2))
|
||||
@@ -244,7 +244,7 @@ function newFrame() {
|
||||
thisPoint = thisObject.parentFrame.frameThisPoint(thisPoint)
|
||||
}
|
||||
|
||||
/* Now we check if the resulting point is whin the current Frame. */
|
||||
/* Now we check if the resulting point is within the current Frame. */
|
||||
|
||||
if (thisObject.type === 'Circle') {
|
||||
let distance = Math.sqrt(Math.pow(thisPoint.x - checkPoint.x, 2) + Math.pow(thisPoint.y - checkPoint.y, 2))
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/* Global Constatns */
|
||||
/* Global Constants */
|
||||
|
||||
let canvas
|
||||
let PROJECTS_SCHEMA
|
||||
@@ -204,9 +204,9 @@ const _1_MINUTE_IN_MILISECONDS = 1 * 60 * 1000;
|
||||
|
||||
|
||||
|
||||
let NEW_SESSION_INITIAL_DATE = new Date(); // This value will be overwritten at the UI.projects.foundations.spaces.chartingSpace.viewport.initialize if the user had a prevous session with this same browser.
|
||||
let NEW_SESSION_INITIAL_DATE = new Date(); // This value will be overwritten at the UI.projects.foundations.spaces.chartingSpace.viewport.initialize if the user had a previous session with this same browser.
|
||||
let INITIAL_ZOOM_LEVEL = -28.25 // This is the zoom level at the view port in which the APP starts.
|
||||
let INITIAL_TIME_PERIOD = ONE_DAY_IN_MILISECONDS // This value will be overwritten at the UI.projects.foundations.spaces.chartingSpace.viewport.initialize if the user had a prevous session with this same browser.
|
||||
let INITIAL_TIME_PERIOD = ONE_DAY_IN_MILISECONDS // This value will be overwritten at the UI.projects.foundations.spaces.chartingSpace.viewport.initialize if the user had a previous session with this same browser.
|
||||
let VERY_LARGE_NUMBER = 100000000000000
|
||||
|
||||
const TOP_MARGIN = 0
|
||||
@@ -246,7 +246,7 @@ const PERIOD_05_MIN = "05-min";
|
||||
const PERIOD_01_MIN = "01-min";
|
||||
|
||||
/*
|
||||
We define here the size of the chartingSpace. It has to bee enough big in order to accomodate all the charts we expect to display in this space.
|
||||
We define here the size of the chartingSpace. It has to bee enough big in order to accommodate all the charts we expect to display in this space.
|
||||
*/
|
||||
|
||||
const TIME_MACHINE_WIDTH = 8;
|
||||
|
||||
@@ -48,6 +48,7 @@ SA.nodeModules = {
|
||||
http: require('http'),
|
||||
ccxt: require('ccxt'),
|
||||
octokit: require("@octokit/rest"),
|
||||
graphql: require("@octokit/graphql"),
|
||||
simpleGit: require('simple-git'),
|
||||
lookpath: require('lookpath'),
|
||||
process: require('process'),
|
||||
|
||||
@@ -4028,7 +4028,7 @@
|
||||
"procedureJavascriptCode": {
|
||||
"type": "Procedure Javascript Code",
|
||||
"name": "New Procedure Javascript Code",
|
||||
"code": "/* LiveTester Stats */\n\n// The LiveTester Stats functions to measure and return the values for given probabilities. So instead of aiming towards a % win, you can see \n// the % probability for the % move. It is created with the concept of a profit is profit, no matter the size. Eliminating the risk of loss, will increase the\n// profitability in the long run.\n// Weighting risks vs chance might put your trading at a better win rate.\n// The LiveTester will also allow you to set a minimum profit and allow a 'Take Position' on any chart a valid 'Take Position' event occurs.\n\n//- - - - - - - - - - - - - - - - - - - \n\n// User Parameters\n\nvariable.minProfit = 0.5 // Measured in full value % - 0.5 is 0.5%\nvariable.minProbability = 90 // Measured in full value % - 90 is 90%\nvariable.rewardRatioValue = 1.5 // Set your Reward to Risk ratio by editing \nvariable.riskRatioValue = 1 // the values for the variables\n\nvariable.riskToReward = variable.rewardRatioValue / variable.riskRatioValue\n\n//- - - - - - - - - - - - - - - - - - - \n\n// Dependencies\n// Make sure to add your indicators in this section by using 'getElement', and also as node(s) in the dependencies for this indicator.\n\nlet candle = record.current\n// let indicator = getElement('indicatorPluralNames', candle)\nlet ema = getElement('5xCustomEMAs', candle)\n\n//- - - - - - - - - - - - - - - - - - - \n\n// Create a running candleIndex\nif (variable.candleIndex === undefined) {\n variable.candleIndex = 1\n}\nelse {\n variable.candleIndex = variable.candleIndex + 1\n}\n\nvariable.position = Math.round((candle.begin + candle.end) / 2)\n\n// For the first run, we set our measuring switch to 'Off'\nif (variable.livetesterStats === undefined) {\n variable.livetesterStats = 'Off'\n}\n\nif (variable.arrayLength === undefined) {\n variable.arrayLength = arrLength()\n}\n\n//- - - - - - - - - - - - - - - - - - - \n\n// Strategy section\n// Define your strategy, including 'Trigger on' and/or your 'Take position' depending on your use case\n\n// Define entry in the IF-statement\nif (record.previous !== undefined) {\n if (variable.livetesterStats === 'Off' && ema.ema03 > ema.ema05 && ema.previous.ema03 < ema.previous.ema05) {\n // Defining values to keep track on and use for calulations\n variable.livetesterStats = 'On'\n if (variable.entryIndex !== undefined) {\n variable.previousEntryIndex = variable.entryIndex\n }\n variable.entryIndex = variable.candleIndex\n }\n\n // Define exit in the IF-statement\n if (variable.livetesterStats === 'On' && ema.ema03 < ema.ema05 && ema.previous.ema03 > ema.previous.ema05) {\n // Defining values to keep track on and use for calulations\n variable.livetesterStats = 'Off'\n variable.exitIndex = variable.candleIndex\n }\n}\n//- - - - - - - - - - - - - - - - - - - \n\n// Stats Tracker section\n\nif (variable.livetesterStats === 'On') {\n\n if (variable.entryIndex === variable.candleIndex) {\n // Reset data from previous\n variable.savedPosition.length = 0\n variable.entryRate = candle.close\n variable.entryPos = variable.position\n variable.pMaxUp = 0\n variable.pMaxUpRate = candle.close\n variable.pMaxUpPos = variable.position\n variable.cMaxUp = 0\n variable.pMaxDown = 0\n variable.pMaxDownRate = candle.close\n variable.pMaxDownPos = variable.position\n variable.cMaxDown = 0\n\n variable.entryTimestamp = candle.end \n\n variable.savedPosition.push(variable.entryTimestamp)\n\n if (variable.bullOption === 1) {\n if (variable.previousBullEntry === undefined) {\n variable.previousBullEntry = variable.candleIndex\n }\n variable.bullEntry = variable.candleIndex\n variable.bullTradeToTrade = variable.bullEntry - variable.previousBullEntry\n \n variable.savedBullTradeToTrade.push(variable.bullTradeToTrade)\n if (variable.savedBullTradeToTrade.length > variable.arrayLength) {\n variable.savedBullTradeToTrade.splice(0,1)\n }\n \n variable.previousBullEntry = variable.bullEntry\n }\n \n if (variable.bearOption === 1) {\n if (variable.previousBearEntry === undefined) {\n variable.previousBearEntry = variable.candleIndex\n }\n variable.bearEntry = variable.candleIndex\n variable.bearTradeToTrade = variable.bearEntry - variable.previousBearEntry\n \n variable.savedBearTradeToTrade.push(variable.bearTradeToTrade)\n if (variable.savedBearTradeToTrade.length > variable.arrayLength) {\n variable.savedBearTradeToTrade.splice(0,1)\n }\n \n variable.previousBullEntry = variable.bullEntry\n }\n }\n\n Line truncated
|
||||
"code": "/* LiveTester Stats */\n\n// The LiveTester Stats functions to measure and return the values for given probabilities. So instead of aiming towards a % win, you can see \n// the % probability for the % move. It is created with the concept of a profit is profit, no matter the size. Eliminating the risk of loss, will increase the\n// profitability in the long run.\n// Weighting risks vs chance might put your trading at a better win rate.\n// The LiveTester will also allow you to set a minimum profit and allow a 'Take Position' on any chart a valid 'Take Position' event occurs.\n\n//- - - - - - - - - - - - - - - - - - - \n\n// User Parameters\n\nvariable.minProfit = 0.5 // Measured in full value % - 0.5 is 0.5%\nvariable.minProbability = 90 // Measured in full value % - 90 is 90%\nvariable.rewardRatioValue = 1.5 // Set your Reward to Risk ratio by editing \nvariable.riskRatioValue = 1 // the values for the variables\n\nvariable.riskToReward = variable.rewardRatioValue / variable.riskRatioValue\n\n//- - - - - - - - - - - - - - - - - - - \n\n// Dependencies\n// Make sure to add your indicators in this section by using 'getElement', and also as node(s) in the dependencies for this indicator.\n\nlet candle = record.current\n// let indicator = getElement('indicatorPluralNames', candle)\nlet ema = getElement('5xCustomEMAs', candle)\n\n//- - - - - - - - - - - - - - - - - - - \n\n// Create a running candleIndex\nif (variable.candleIndex === undefined) {\n variable.candleIndex = 1\n}\nelse {\n variable.candleIndex = variable.candleIndex + 1\n}\n\nvariable.position = Math.round((candle.begin + candle.end) / 2)\n\n// For the first run, we set our measuring switch to 'Off'\nif (variable.livetesterStats === undefined) {\n variable.livetesterStats = 'Off'\n}\n\nif (variable.arrayLength === undefined) {\n variable.arrayLength = arrLength()\n}\n\n//- - - - - - - - - - - - - - - - - - - \n\n// Strategy section\n// Define your strategy, including 'Trigger on' and/or your 'Take position' depending on your use case\n\n// Define entry in the IF-statement\nif (record.previous !== undefined) {\n if (variable.livetesterStats === 'Off' && ema.ema03 > ema.ema05 && ema.previous.ema03 < ema.previous.ema05) {\n // Defining values to keep track on and use for calculations\n variable.livetesterStats = 'On'\n if (variable.entryIndex !== undefined) {\n variable.previousEntryIndex = variable.entryIndex\n }\n variable.entryIndex = variable.candleIndex\n }\n\n // Define exit in the IF-statement\n if (variable.livetesterStats === 'On' && ema.ema03 < ema.ema05 && ema.previous.ema03 > ema.previous.ema05) {\n // Defining values to keep track on and use for calulations\n variable.livetesterStats = 'Off'\n variable.exitIndex = variable.candleIndex\n }\n}\n//- - - - - - - - - - - - - - - - - - - \n\n// Stats Tracker section\n\nif (variable.livetesterStats === 'On') {\n\n if (variable.entryIndex === variable.candleIndex) {\n // Reset data from previous\n variable.savedPosition.length = 0\n variable.entryRate = candle.close\n variable.entryPos = variable.position\n variable.pMaxUp = 0\n variable.pMaxUpRate = candle.close\n variable.pMaxUpPos = variable.position\n variable.cMaxUp = 0\n variable.pMaxDown = 0\n variable.pMaxDownRate = candle.close\n variable.pMaxDownPos = variable.position\n variable.cMaxDown = 0\n\n variable.entryTimestamp = candle.end \n\n variable.savedPosition.push(variable.entryTimestamp)\n\n if (variable.bullOption === 1) {\n if (variable.previousBullEntry === undefined) {\n variable.previousBullEntry = variable.candleIndex\n }\n variable.bullEntry = variable.candleIndex\n variable.bullTradeToTrade = variable.bullEntry - variable.previousBullEntry\n \n variable.savedBullTradeToTrade.push(variable.bullTradeToTrade)\n if (variable.savedBullTradeToTrade.length > variable.arrayLength) {\n variable.savedBullTradeToTrade.splice(0,1)\n }\n \n variable.previousBullEntry = variable.bullEntry\n }\n \n if (variable.bearOption === 1) {\n if (variable.previousBearEntry === undefined) {\n variable.previousBearEntry = variable.candleIndex\n }\n variable.bearEntry = variable.candleIndex\n variable.bearTradeToTrade = variable.bearEntry - variable.previousBearEntry\n \n variable.savedBearTradeToTrade.push(variable.bearTradeToTrade)\n if (variable.savedBearTradeToTrade.length > variable.arrayLength) {\n variable.savedBearTradeToTrade.splice(0,1)\n }\n \n variable.previousBullEntry = variable.bullEntry\n }\n }\n\n Line truncated
|
||||
"project": "Foundations",
|
||||
"id": "bb9d955f-fed2-44b8-85f0-90104a30e83b",
|
||||
"savedPayload": {
|
||||
|
||||
+9
-9
@@ -1,12 +1,12 @@
|
||||
exports.newDataMiningBotModulesFromOneMinToMultiTimeFrameMarket = function (processIndex) {
|
||||
/*
|
||||
This module is about converting a One-Min Daily typeo of data set into a Multi Time Frame Market type.
|
||||
This module is about converting a One-Min Daily type of data set into a Multi Time Frame Market type.
|
||||
|
||||
The process to do so involves:
|
||||
|
||||
Reading the elements (elements, volumens, bolllinger bands, news, asset metrics, etc.) from a
|
||||
Reading the elements (elements, volumes, bollinger bands, news, asset metrics, etc.) from a
|
||||
One-Min Dataset (a dataset that is organized with elements spanning one min, like one min begin-end-elements,
|
||||
or elements with a timestamp captured approximatelly one minute from each other)
|
||||
or elements with a timestamp captured approximately one minute from each other)
|
||||
organized in Daily Files.
|
||||
|
||||
It is going to output a Market Files dataset for every Market Time Frame, aggregating the
|
||||
@@ -35,7 +35,7 @@ exports.newDataMiningBotModulesFromOneMinToMultiTimeFrameMarket = function (proc
|
||||
|
||||
let statusDependenciesModule
|
||||
let dataDependenciesModule
|
||||
let node = {} // Usefull nodes for this module will be stored here.
|
||||
let node = {} // Useful nodes for this module will be stored here.
|
||||
|
||||
return thisObject;
|
||||
|
||||
@@ -67,7 +67,7 @@ exports.newDataMiningBotModulesFromOneMinToMultiTimeFrameMarket = function (proc
|
||||
datetimeLastProducedFile: undefined, // Datetime of the last file files successfully produced by this process.
|
||||
datetimeBeginingOfMarketFile: undefined, // Datetime of the first trade file in the whole market history.
|
||||
datetimeLastAvailableDependencyFile: undefined, // Datetime of the last file available to be used as an input of this process.
|
||||
beginingOfMarket: undefined // Datetime of the begining of the market.
|
||||
beginingOfMarket: undefined // Datetime of the beginning of the market.
|
||||
}
|
||||
|
||||
TS.projects.foundations.functionLibraries.fromOneMinToMultiTimeFrameFunctions.getContextVariables(
|
||||
@@ -129,7 +129,7 @@ exports.newDataMiningBotModulesFromOneMinToMultiTimeFrameMarket = function (proc
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
"[ERROR] start -> loadExistingFiles -> loopBody -> readExistingFile -> onFileReceived -> err = " + err.stack)
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
"[ERROR] start -> loadExistingFiles -> loopBody -> readExistingFile -> onFileReceived -> Asuming this is a temporary situation. Requesting a Retry.")
|
||||
"[ERROR] start -> loadExistingFiles -> loopBody -> readExistingFile -> onFileReceived -> Assuming this is a temporary situation. Requesting a Retry.")
|
||||
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE)
|
||||
}
|
||||
} else {
|
||||
@@ -167,7 +167,7 @@ exports.newDataMiningBotModulesFromOneMinToMultiTimeFrameMarket = function (proc
|
||||
let fromDate = new Date(contextVariables.datetimeLastProducedFile.valueOf())
|
||||
let lastDate = TS.projects.foundations.utilities.dateTimeFunctions.removeTime(new Date())
|
||||
/*
|
||||
Firstly we prepere the arrays that will accumulate all the information for each output file.
|
||||
Firstly we prepare the arrays that will accumulate all the information for each output file.
|
||||
*/
|
||||
let outputElements = []
|
||||
|
||||
@@ -191,7 +191,7 @@ exports.newDataMiningBotModulesFromOneMinToMultiTimeFrameMarket = function (proc
|
||||
|
||||
function timeframesLoop() {
|
||||
/*
|
||||
We will iterate through all posible time frames.
|
||||
We will iterate through all possible time frames.
|
||||
*/
|
||||
let timeFrameArrayIndex = 0 // loop Variable representing each possible period as defined at the Time Frame Array.
|
||||
|
||||
@@ -252,7 +252,7 @@ exports.newDataMiningBotModulesFromOneMinToMultiTimeFrameMarket = function (proc
|
||||
function aggregateAndWriteOutputFile(dependencyDailyFile) {
|
||||
/*
|
||||
Here we call the function that will aggregate all the information
|
||||
at the dependency file into standarized begin-end-elements.
|
||||
at the dependency file into standardized begin-end-elements.
|
||||
*/
|
||||
TS.projects.foundations.functionLibraries.fromOneMinToMultiTimeFrameFunctions.aggregateFileContent(
|
||||
node,
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
const MODULE_NAME = "Multi Time Frame Daily"
|
||||
/*
|
||||
This module deals with Daily Files, that are data files for Time Frames below 1 hour.
|
||||
It also assumes that the data dependencias are in Daily Files, one file for each Time Frame.
|
||||
It also assumes that the data dependencies are in Daily Files, one file for each Time Frame.
|
||||
*/
|
||||
let thisObject = {
|
||||
initialize: initialize,
|
||||
@@ -58,11 +58,11 @@
|
||||
let thisReport
|
||||
let statusReport
|
||||
/*
|
||||
We look first for the bot who knows the begining of the market in order to get when the market starts.
|
||||
We look first for the bot who knows the beginning of the market in order to get when the market starts.
|
||||
*/
|
||||
statusReport = statusDependenciesModule.reportsByMainUtility.get("Market Starting Point")
|
||||
|
||||
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month.
|
||||
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the beginning of a month.
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
"[WARN] start -> getContextVariables -> Market Starting Point -> Status Report does not exist or Market Starting Point not defined. Retrying Later. ")
|
||||
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE)
|
||||
@@ -114,7 +114,7 @@
|
||||
*/
|
||||
statusReport = statusDependenciesModule.reportsByMainUtility.get("Market Ending Point")
|
||||
|
||||
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month.
|
||||
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the beginning of a month.
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
"[WARN] start -> getContextVariables -> Market Ending Point -> Status Report does not exist or Market Ending Point not defined. Retrying Later. ")
|
||||
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE)
|
||||
@@ -149,7 +149,7 @@
|
||||
/* Finally we get our own Status Report. */
|
||||
statusReport = statusDependenciesModule.reportsByMainUtility.get("Self Reference")
|
||||
|
||||
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month.
|
||||
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the beginning of a month.
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
"[WARN] start -> getContextVariables -> Self Reference -> Status Report does not exist or Self Reference not defined or badly configured. Check that at the Status Dependency you have chosen Self Reference at the config. Retrying Later. ")
|
||||
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE)
|
||||
@@ -169,7 +169,7 @@
|
||||
|
||||
beginingOfMarket = new Date(thisReport.beginingOfMarket)
|
||||
|
||||
if (beginingOfMarket.valueOf() !== contextVariables.dateBeginOfMarket.valueOf()) { // Reset Mechanism for Begining of the Market
|
||||
if (beginingOfMarket.valueOf() !== contextVariables.dateBeginOfMarket.valueOf()) { // Reset Mechanism for Beginning of the Market
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
"[INFO] start -> getContextVariables -> Reset Mechanism for Begining of the Market Activated.")
|
||||
|
||||
@@ -185,7 +185,7 @@
|
||||
} else {
|
||||
|
||||
/*
|
||||
In the case when there is no status report, we assume like the last processed file is the one on the date of Begining of Market.
|
||||
In the case when there is no status report, we assume like the last processed file is the one on the date of Beginning of Market.
|
||||
*/
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
"[INFO] start -> getContextVariables -> Starting from the begining of the market because own status report not found or lastFile was undefined.")
|
||||
@@ -209,7 +209,7 @@
|
||||
*/
|
||||
interExecutionMemoryArray = []
|
||||
/*
|
||||
Also, we will remember that we are bootstrapping the process, this will allow us, to advanceTime if necesary.
|
||||
Also, we will remember that we are bootstrapping the process, this will allow us, to advanceTime if necessary.
|
||||
It can happen that a process depends on data from another process that does not produce a file during the first day, or even more days,
|
||||
in that situation we want the process not to just wait for that data that will never arrive, but to advance time until it finds valid data.
|
||||
*/
|
||||
@@ -242,7 +242,7 @@
|
||||
let botNeverRan = true;
|
||||
|
||||
TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).DAILY_FILES_PROCESS_DATETIME =
|
||||
new Date(contextVariables.lastFile.valueOf() - SA.projects.foundations.globals.timeConstants.ONE_DAY_IN_MILISECONDS) // Go back one day to start well when we advance time at the begining of the loop.
|
||||
new Date(contextVariables.lastFile.valueOf() - SA.projects.foundations.globals.timeConstants.ONE_DAY_IN_MILISECONDS) // Go back one day to start well when we advance time at the beginning of the loop.
|
||||
let fromDate = new Date(TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).DAILY_FILES_PROCESS_DATETIME.valueOf())
|
||||
let lastDate = TS.projects.foundations.utilities.dateTimeFunctions.removeTime(new Date())
|
||||
|
||||
@@ -297,7 +297,7 @@
|
||||
|
||||
function timeFramesLoop() {
|
||||
/*
|
||||
We will iterate through all posible timeFrames.
|
||||
We will iterate through all possible timeFrames.
|
||||
*/
|
||||
n = 0 // loop Variable representing each possible period as defined at the timeFrames array.
|
||||
timeFramesLoopBody()
|
||||
@@ -375,8 +375,8 @@
|
||||
function onFileReceived(err, text) {
|
||||
if ((err.message === "File does not exist." && botNeverRan === true) || err.code === 'The specified key does not exist.') {
|
||||
/*
|
||||
Sometimes one of the dependencies of an indicator for some reasons are not calculated from the begining of the market.
|
||||
When that happens we can not find those files. What we do in this situation is to move the time fordward until we can find
|
||||
Sometimes one of the dependencies of an indicator for some reasons are not calculated from the beginning of the market.
|
||||
When that happens we can not find those files. What we do in this situation is to move the time forward until we can find
|
||||
all the dependencies and the first run of the bot is successful.
|
||||
|
||||
After that, we will not accept more missing files on any of the dependencies, and if any is missing we will abort the processing.
|
||||
@@ -429,7 +429,7 @@
|
||||
if (bootstrappingTheProcess === true) {
|
||||
/*
|
||||
In the special situation where we are running this process for the first time (no status report found),
|
||||
we will consider the possibility that a depanant process does not produce a file during the first day of the market,
|
||||
we will consider the possibility that a dependant process does not produce a file during the first day of the market,
|
||||
or even more than one day. That is why we are going to advance time here.
|
||||
*/
|
||||
advanceTime()
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
const MODULE_NAME = "Multi Time Frame Market"
|
||||
/*
|
||||
This module deals with Market Files, that are data files for Time Frames of 1 hour and above.
|
||||
It also assumes that the data dependencias are in Market Files, one file for each Time Frame.
|
||||
It also assumes that the data dependencies are in Market Files, one file for each Time Frame.
|
||||
*/
|
||||
let thisObject = {
|
||||
initialize: initialize,
|
||||
@@ -46,7 +46,7 @@
|
||||
timeFramesLoop()
|
||||
|
||||
function timeFramesLoop() {
|
||||
/* We will iterate through all posible timeFrames.*/
|
||||
/* We will iterate through all possible timeFrames.*/
|
||||
n = 0 // loop Variable representing each possible period as defined at the timeFrames array.
|
||||
timeFramesLoopBody()
|
||||
}
|
||||
|
||||
+13
-13
@@ -69,7 +69,7 @@
|
||||
1. Parameters set by SA user at the Crypto Exchange node are extracted. There might be parameters for each supported method at the CCXT library.
|
||||
2. The CCXT class for the configured exchange is instantiated, with whatever options where configured.
|
||||
|
||||
This gives the SA user a lot of control over the underlaying CCXT gateway to exchanges.
|
||||
This gives the SA user a lot of control over the underlying CCXT gateway to exchanges.
|
||||
*/
|
||||
try {
|
||||
statusDependencies = pStatusDependencies;
|
||||
@@ -204,7 +204,7 @@
|
||||
|
||||
if (statusDependencies.statusReports.get(reportKey).status === "Status Report is corrupt.") {
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
"[ERROR] start -> getContextVariables -> Can not continue because dependecy Status Report is corrupt. ");
|
||||
"[ERROR] start -> getContextVariables -> Can not continue because dependency Status Report is corrupt. ");
|
||||
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE);
|
||||
return;
|
||||
}
|
||||
@@ -664,11 +664,11 @@
|
||||
What we are going to do in this function is to save all the candles
|
||||
received from the exchange. We need to partition the batch of candles
|
||||
into 1 day files. At the same time we need to take care of the situation
|
||||
that some exchanges send inconsitent data. We have detected some cases
|
||||
that some exchanges send inconsistent data. We have detected some cases
|
||||
where candles do not begin at second 0 of the minute but are a little
|
||||
bit shifted. We will try to detect this and fix it as we go.
|
||||
|
||||
We have the data received from the exchange at the arrary rawDataArray
|
||||
We have the data received from the exchange at the array rawDataArray
|
||||
*/
|
||||
try {
|
||||
|
||||
@@ -761,7 +761,7 @@
|
||||
Here we will check that the current candle is not going into the future.
|
||||
Remember we are looping around all possible minutes of a day, and when
|
||||
that day is the current actual day, and the current minute is in the future,
|
||||
it manke no more sense to continue inside this loop since we are not going
|
||||
it make no more sense to continue inside this loop since we are not going
|
||||
to find more OHLCVs matchings.
|
||||
|
||||
At the same time, we are going to check that we haven't processed the whole
|
||||
@@ -808,7 +808,7 @@
|
||||
|
||||
/*
|
||||
We will check that we can have a record to
|
||||
analize. It might happen that we don't have one
|
||||
analyze. It might happen that we don't have one
|
||||
in the situation that we could not get a single
|
||||
record from the exchange. We still want to be
|
||||
here so that everything is properly logged.
|
||||
@@ -828,7 +828,7 @@
|
||||
let OHLCVMinute
|
||||
/*
|
||||
Some exchanges return inconsistent data. It is not guaranteed
|
||||
that each candle will have a timeStamp exactly at the begining of an
|
||||
that each candle will have a timeStamp exactly at the beginning of an
|
||||
UTC minute. It is also not guaranteed that the distance
|
||||
between timestamps will be the same. To fix this, we will do this.
|
||||
*/
|
||||
@@ -839,12 +839,12 @@
|
||||
If the minute of the record item received from the exchange is
|
||||
less than the minute of the current minute in our loop,
|
||||
that means that we need to reposition the inded at the rawDataArray
|
||||
array, moving it one record fordward, and that is what we are
|
||||
array, moving it one record forward, and that is what we are
|
||||
doing here.
|
||||
*/
|
||||
while (OHLCVMinute < candleMinute) {
|
||||
|
||||
/* Move fordward at the rawDataArray array. */
|
||||
/* Move forward at the rawDataArray array. */
|
||||
ohlcvArrayIndex++
|
||||
|
||||
/* Check that we have not passed the end of the array */
|
||||
@@ -903,7 +903,7 @@
|
||||
|
||||
/*
|
||||
Since we extracted this OHLCV value, we move
|
||||
fordward our array index.
|
||||
forward our array index.
|
||||
*/
|
||||
if (ohlcvArrayIndex < rawDataArray.length - 1) {
|
||||
ohlcvArrayIndex++
|
||||
@@ -915,7 +915,7 @@
|
||||
}
|
||||
|
||||
/*
|
||||
Here we remeber the last candle and volumen, in case
|
||||
Here we remember the last candle and volume, in case
|
||||
we need it.
|
||||
*/
|
||||
lastCandle = candle
|
||||
@@ -1088,7 +1088,7 @@
|
||||
|
||||
/*
|
||||
One possible exit is when we reached the amount of candles downloaded.
|
||||
This does not necesary happens at the end of the market
|
||||
This does not necessary happens at the end of the market
|
||||
if the process was canceled for any reason at the middle,
|
||||
or the exchange became unavailable.
|
||||
*/
|
||||
@@ -1111,7 +1111,7 @@
|
||||
}
|
||||
|
||||
/*
|
||||
If there is no reson to exit, we will process the next day.
|
||||
If there is no reason to exit, we will process the next day.
|
||||
*/
|
||||
setImmediate(loop)
|
||||
}
|
||||
|
||||
@@ -1,7 +1,14 @@
|
||||
{
|
||||
"type": "Tutorial Step",
|
||||
"definition": {
|
||||
"text": "A tutorial step is a type of node within a tutorial that may not have offspring. As such, it is the smallest unit of information in the hierarchy."
|
||||
"text": "A tutorial step is a type of node within a tutorial that may not have offspring. As such, it is the smallest unit of information in the hierarchy.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Шаг учебного пособия - это тип узла в пособии, который может не иметь потомков. Таким образом, это самая маленькая единица информации в иерархии.",
|
||||
"updated": 1635612531097
|
||||
}
|
||||
]
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
|
||||
@@ -1,7 +1,14 @@
|
||||
{
|
||||
"type": "Tutorial Topic",
|
||||
"definition": {
|
||||
"text": "A tutorial topic is an organizational device that helps to keep tutorial step nodes arranged in a logical hierarchy by topics and subtopics."
|
||||
"text": "A tutorial topic is an organizational device that helps to keep tutorial step nodes arranged in a logical hierarchy by topics and subtopics.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Учебная тема - это организационное устройство, которое помогает упорядочивать узлы этапов обучения в логической иерархии по темам и подтемам.",
|
||||
"updated": 1635612097339
|
||||
}
|
||||
]
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
|
||||
@@ -13,7 +13,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die Tutorial-Hierarchie besteht aus einer freien Anordnung von Tutorial Topic (Themen) und Tutorial Step nodes (Schritten), die ein Tutorial ausmachen. Jede node in der Hierarchie, einschließlich des übergeordneten Tutorial-nodes, stellt eine HTML-Seite dar, die sowohl über dem Design Space als auch dem Charting Space eingeblendet werden kann. Übersetzt ins deutsche von gitforkgit.",
|
||||
"updated": 1633975790458
|
||||
"updated": 1633975790458,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Иерархия данного пособия содержит свободное расположение Tutorial Topic и узлов Tutorial Step, которые вместе составляют это учебное пособие. Каждый узел в иерархии, включая родительский узел пособия, представляет собой HTML-страницу, которая может быть наложена поверх Design Space и Charting Space.",
|
||||
"updated": 1635509527381
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -30,7 +36,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die Nodes in der Hierarchie können frei angeordnet werden, das heißt es können beliebig viele Tutorial-Themen (topic) und Tutorial-Steps vorhanden sein. Tutorial Themen können Tutorial Schritte aber auch andere Tutorial Themen enthalten. Dies erlaubt es verschachtelte Themen als Unterthemen verwendet werden.",
|
||||
"updated": 1633975991952
|
||||
"updated": 1633975991952,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -42,7 +49,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Das System wertet die Hierarchie - wie üblich - im Uhrzeigersinn aus, beginnend mit dem Knoten rechts vom übergeordneten Tutorial-Knoten, zum tiefsten Knoten jedes Zweigs geht, bevor es zum nächsten geht.",
|
||||
"updated": 1633976627129
|
||||
"updated": 1633976627129,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -54,7 +62,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Im Allgemeinen verhalten sich alle nodes ähnlich in dem Sinne, dass jede node, unabhängig vom genauen Typ, für sich genommen einen Lernschritt darstellt. Das heißt, alle nodes, einschließlich der obersten Tutorial-node, der Tutorial Topic node und der Tutorial Step node können eine Inhaltsseite als Schritt im Tutorial anzeigen. Feinere Unterschiede sind gegebenenfalls hervorzuheben.",
|
||||
"updated": 1633976586338
|
||||
"updated": 1633976586338,
|
||||
"style": "Callout"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -66,7 +75,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die wichtigste Gemeinsamkeit aller Knotentypen in der Hierarchie ist, dass sie alle Inhalte aus der Sammlung der Dokumentseiten des Tutorials beziehen können. Das heißt, jeder Knoten in der Hierarchie zeigt auf eine Docs Page (Dokumentationsseite), und es ist diese Seite in den Dokumenten, die den Inhalt für den gegebenen Schritt anzeigt. Der Zeiger wird in der Konfiguration jedes Knotens angegeben (siehe die Eigenschaft docs).",
|
||||
"updated": 1633976778899
|
||||
"updated": 1633976778899,
|
||||
"style": "Note"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -82,7 +92,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Tutorial Konfiguration",
|
||||
"updated": 1633976794872
|
||||
"updated": 1633976794872,
|
||||
"style": "Title"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -94,7 +105,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die Konfiguration jedes Knotens in der Tutorial-Hierarchie bestimmt den Inhalt und das Verhalten der einzelnen Schritte. Alle node-typen haben die gleiche Grundkonfiguration. Tutorial Step nodes haben jedoch zusätzliche Eigenschaften, die auf der Seite \" Tutorial Step nodes \" beschrieben werden.",
|
||||
"updated": 1633977045116
|
||||
"updated": 1633977045116,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -106,7 +118,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die auf dieser Seite beschriebenen Konfigurationseigenschaften gelten für alle Arten von Nodes in der Hierarchie.",
|
||||
"updated": 1633977077545
|
||||
"updated": 1633977077545,
|
||||
"style": "Success"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -118,7 +131,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Das Layout der HTML-Seite folgt dem Layout der zugehörigen Seite in den Docs, wird aber innerhalb der Grenzen des Tutorial-Fensters angezeigt.",
|
||||
"updated": 1633977110132
|
||||
"updated": 1633977110132,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -130,7 +144,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Mit anderen Worten beeinflussen Sie das Layout des jeweiligen Schritts, indem Sie Inhalte schreiben und Stile auf einzelne Absätze in der zugehörigen Docs-Page anwenden.",
|
||||
"updated": 1633977352460
|
||||
"updated": 1633977352460,
|
||||
"style": "Callout"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -142,7 +157,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die HTML / Tutorial -Seite verfügt über einen begrenzten Platz und unterstützt kein Scrollen. Wenn zu viele Informationen in der zugehörigen Docs Page definiert werden, übersteigt der resultierende Inhalt den verfügbaren Platz im Tutorial-Fenster. Es gibt keine systemseitige Kontrolle, um mit solchen Text-Überläufen (in den Tutorial fenstern) umzugehen, so dass es an Ihnen liegt, die Informationen auf mehrere Schritte zu verteilen und jede Seite innerhalb ihrer Grenzen zu halten.",
|
||||
"updated": 1633977528479
|
||||
"updated": 1633977528479,
|
||||
"style": "Note"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -154,7 +170,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Eigenschaften der Konfiguration",
|
||||
"updated": 1633977545673
|
||||
"updated": 1633977545673,
|
||||
"style": "Title"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -171,7 +188,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Das Eigenschaftssymbol benötigt zwei Definitionen:",
|
||||
"updated": 1633977572877
|
||||
"updated": 1633977572877,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -182,7 +200,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Der \"name\" des Symbols ohne die Erweiterung;",
|
||||
"updated": 1633977609627
|
||||
"updated": 1633977609627,
|
||||
"style": "List"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -193,7 +212,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Das \"project\", zu dem das Symbol gehört.",
|
||||
"updated": 1633977635502
|
||||
"updated": 1633977635502,
|
||||
"style": "List"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -204,7 +224,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Zu Ihrer Information: Die Icons (Symbole) werden unter folgendem Pfad gespeichert:",
|
||||
"updated": 1633977674577
|
||||
"updated": 1633977674577,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -221,7 +242,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Verwenden Sie die vorhandene Sammlung von Icons (Symbolen), um jeden Schritt des Tutorials zu illustrieren. Diese Illustrationen tragen sehr viel zu einer überzeugenderen Kommunikation bei.",
|
||||
"updated": 1633977745001
|
||||
"updated": 1633977745001,
|
||||
"style": "Success"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -233,7 +255,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Wenn die Konfiguration vorhanden ist, wird das Symbol in einer Tabelle neben dem Textblock platziert, der das Definitionsfeld der zugehörigen Docs Page bildet. Wenn kein Symbol vorhanden ist, nimmt die Definition die gesamte Breite der Seite ein.",
|
||||
"updated": 1633977797138
|
||||
"updated": 1633977797138,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -250,7 +273,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die obige Konfiguration platziert das Symbol balance.png des Superalgos-Projekts in der Tabelle der entsprechenden Docs-Seite (siehe die docs Eigenschaft unten).",
|
||||
"updated": 1633977851249
|
||||
"updated": 1633977851249,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -267,7 +291,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die Eigenschaft \"position\" bestimmt die Position des fließenden HTML-Dokuments (Tutorial-Fensters). Es gibt drei Alternativen... \"Links\", \"Rechts\", oder lassen Sie das Feld leer, um die Seite in der Mitte des Bildschirms zu positionieren.",
|
||||
"updated": 1633977968939
|
||||
"updated": 1633977968939,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -284,7 +309,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Bei der obigen Konfiguration befindet sich das Tutorial-Fenster auf der linken Seite des Bildschirms.",
|
||||
"updated": 1633978012441
|
||||
"updated": 1633978012441,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -300,7 +326,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die Eigenschaft slider bestimmt die Position des horizontalen Schiebereglers. Es gibt drei Alternativen... \"toTop\", \"toBottom\", \"toMiddle\".",
|
||||
"updated": 1633978051324
|
||||
"updated": 1633978051324,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -331,7 +358,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Mit der Eigenschaft pressButton können Sie das Tutorial zwangsweise \"anhalten\", zum \"nächsten\" Schritt gehen, zum \"vorherigen\" Schritt gehen oder einen Schritt \"überspringen\". Wenn ein Schritt geladen wird und eine dieser Optionen in dieser Eigenschaft konfiguriert ist, wird die Aktion sofort ausgeführt.",
|
||||
"updated": 1633978127988
|
||||
"updated": 1633978127988,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -343,7 +371,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Eine häufige Verwendung dieser Funktion ist das Überspringen eines Schrittes, z.B. einer Tutorial-topic-node, die ausschließlich für organisatorische Zwecke innerhalb der Hierarchie verwendet wird und daher keinen Inhalt hat. Lassen Sie das Feld leer, damit der Schritt auf die übliche Weise abgespielt wird.",
|
||||
"updated": 1633978359504
|
||||
"updated": 1633978359504,
|
||||
"style": "Note"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -360,7 +389,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die obige Konfiguration führt den Benutzer zum nächsten Schritt des Tutorials, ohne dass der Inhalt der betreffenden node angezeigt wird.",
|
||||
"updated": 1633978461463
|
||||
"updated": 1633978461463,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -372,7 +402,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Sie können Tutorial Topic nodes nur zu organisatorischen Zwecken verwenden, z.B. um die Hierarchie so anzuordnen, dass sie einfach zu lesen und zu pflegen ist. Themen mit zu vielen Schritten sind später schwieriger zu handhaben. Mit anderen Worten: Sie können einen Tutorial Topic node verwenden, um mehrere Schritte zu gruppieren, auch wenn Sie nicht beabsichtigen, dass die Tutorial Topic node irgendeinen Inhalt anzeigt. In solchen Fällen können Sie diese Eigenschaft verwenden, um den Schritt zu überspringen, der nicht für die Anzeige von Inhalten vorgesehen ist.",
|
||||
"updated": 1633979074457
|
||||
"updated": 1633979074457,
|
||||
"style": "Success"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -389,7 +420,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die docs-Eigenschaft wird verwendet, um auf die Docs Tutorial Page zu verweisen, die den Inhalt für den jeweiligen Tutorial-Schritt liefert. Die Definition erfordert den Namen des Project (Projekts), die Docs Page Category (Kategorie) welche immer \"Tutorial\" ist, und den vollständigen Namen der Docs Page, das heißt den \"Typ\", wie in der JSON-Datei angegeben.",
|
||||
"updated": 1633979212224
|
||||
"updated": 1633979212224,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -410,7 +442,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die Eigenschaft wird verwendet, um das Verhalten des Docs-Panels zu steuern. Innerhalb von controlDocs sind mehrere Eigenschaften verfügbar, die alle optional sind. Sehen wir uns jede im Detail an.",
|
||||
"updated": 1633979296433
|
||||
"updated": 1633979296433,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -422,7 +455,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die Panel-Eigenschaft kann auf \"Öffnen\" oder \"Schließen\" eingestellt werden. Diese Eigenschaft steuert die Registerkarte, mit der Sie das Doku-Panel in einem Schritt öffnen und in einem anderen Schritt wieder schließen können, wenn es nicht mehr benötigt wird.",
|
||||
"updated": 1633979356912
|
||||
"updated": 1633979356912,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -443,7 +477,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Wenn das Docs Panel geschlossen ist, sind die restlichen Eigenschaften irgendwie irrelevant. Wenn das Docs-Panel jedoch geöffnet ist, steuern die restlichen Eigenschaften, was im Docs-Panel angezeigt wird.",
|
||||
"updated": 1633979402232
|
||||
"updated": 1633979402232,
|
||||
"style": "Success"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -455,7 +490,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die Eigenschaft closeTutorialEditor kann den Docs-Editor ein- und ausschalten. Wenn die Eigenschaft auf false gesetzt ist oder wenn es keine Definition gibt und wenn keine spezifische Docs-Seite aufgerufen wird (siehe controlDocs unten), zeigt das Docs-Panel die Seite, die mit dem aktuellen Tutorial-Schritt im Bearbeitungsmodus verbunden ist.",
|
||||
"updated": 1633979594120
|
||||
"updated": 1633979594120,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -472,7 +508,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Da diese Definition standardmäßig auf false gesetzt ist, ist dies das standardmäßige Verhalten. Das heißt, wenn das Docs-Bedienfeld geöffnet wird, während ein Tutorial-Schritt abgespielt wird, zeigt das Docs-Bedienfeld standardmäßig die Docs-Seite an, die mit dem jeweiligen Schritt verknüpft ist, so dass die Seite direkt an Ort und Stelle bearbeitet werden kann.",
|
||||
"updated": 1633979921238
|
||||
"updated": 1633979921238,
|
||||
"style": "Success"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -484,7 +521,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Wenn die Eigenschaft closeTutorialEditor auf true gesetzt ist und keine Anforderung zum Öffnen einer Dokumentseite vorliegt (siehe Eigenschaft page weiter unten), dann zeigt das Dokumentseiten-Panel die Dokumentseite an, die im vorherigen Schritt angezeigt wurde.",
|
||||
"updated": 1633979700958
|
||||
"updated": 1633979700958,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -501,7 +539,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Es kann sinnvoll sein, den Tutorial Editor zu schließen, wenn der Benutzer von einem Schritt zum nächsten mit den Docs interagieren soll. Nehmen wir zum Beispiel an, das Tutorial weist den Benutzer an, eine Suche durchzuführen und dieses Ergebnis im nächsten Schritt zu besprechen. In diesem Fall möchten Sie, dass der Editor des Tutorials geschlossen bleibt, da sonst die vom Benutzer durchgeführte Suche verloren ginge und stattdessen die Seite geladen würde, die dem neuen Schritt des Tutorials entspricht.",
|
||||
"updated": 1633979902886
|
||||
"updated": 1633979902886,
|
||||
"style": "Success"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -513,7 +552,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die Eigenschaft searchPage überschreibt die Einstellungen des Tutorial-Editors und lädt die Hauptsuchseite mit dem Suchfeld in der Mitte.",
|
||||
"updated": 1633979953175
|
||||
"updated": 1633979953175,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -530,7 +570,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Verwenden Sie die obige Einstellung, wenn Sie möchten, dass der Benutzer das saubere Suchfeld erhält, um eine Suche durchzuführen oder einen Befehl auszuführen.",
|
||||
"updated": 1633980006636
|
||||
"updated": 1633980006636,
|
||||
"style": "Success"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -542,7 +583,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Mit der page property legen Sie fest, welche Docs Page geladen werden soll. Sie müssen das Project (Projekt), die Docs Page Category (Kategorie) und den \"type\" (Typ), also den vollständigen Namen der Seite, angeben. Die optionale Eigenschaft anchor ermöglicht es Ihnen, den Benutzer mit dem Docs Anchor Style auf einen bestimmten Absatz der Seite zu verweisen.",
|
||||
"updated": 1633980112889
|
||||
"updated": 1633980112889,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -559,7 +601,8 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Verwenden Sie die obige Konfiguration, wenn Sie möchten, dass der Benutzer eine bestimmte Seite in den Docs liest.",
|
||||
"updated": 1633980693215
|
||||
"updated": 1633980693215,
|
||||
"style": "Success"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -9,6 +9,31 @@ function newEducationFunctionLibraryDocsStats() {
|
||||
node,
|
||||
rootNodes
|
||||
) {
|
||||
console.log("this is our docs stats")
|
||||
console.log("Docs Statistical Report:")
|
||||
let documentPage
|
||||
let pagesCount = 0
|
||||
let projectStats = {}
|
||||
|
||||
// Create Stats for each project
|
||||
for (let j = 0; j < PROJECTS_SCHEMA.length; j++) {
|
||||
let project = PROJECTS_SCHEMA[j].name
|
||||
projectStats[project] = 0
|
||||
}
|
||||
|
||||
for (let i = 0; i < UI.projects.education.spaces.docsSpace.searchEngine.docsIndex.length; i++) {
|
||||
documentPage = UI.projects.education.spaces.docsSpace.searchEngine.docsIndex[i]
|
||||
pagesCount += 1
|
||||
if (projectStats[documentPage.project] !== undefined) {
|
||||
lastValue = projectStats[documentPage.project]
|
||||
}
|
||||
projectStats[documentPage.project] = lastValue + 1
|
||||
|
||||
//will need to access documentPage.docsSchemaDocument.paragraphs then for each paragraph paragraph.translations
|
||||
|
||||
}
|
||||
console.log("We have this many pages " + pagesCount + " total across all projects.")
|
||||
for (let project in projectStats) {
|
||||
console.log(`There are this many pages ${projectStats[project]} in the ${project} project`)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -177,7 +177,7 @@ exports.newFoundationsUtilitiesHttpResponses = function () {
|
||||
|
||||
if (fileNameReceived === '') {
|
||||
/*
|
||||
When there is no endpoint specidied we will respond with this app's Home Page.
|
||||
When there is no endpoint specified we will respond with this app's Home Page.
|
||||
*/
|
||||
let fs = SA.nodeModules.fs
|
||||
|
||||
@@ -194,7 +194,7 @@ exports.newFoundationsUtilitiesHttpResponses = function () {
|
||||
} else {
|
||||
/*
|
||||
When there is a parameter but it does not match any of the available endpoints, we
|
||||
will serve the file with the same name at at a location that depends on it's file extention.
|
||||
will serve the file with the same name at at a location that depends on it's file extension.
|
||||
*/
|
||||
let completeFileName = fileNameReceived
|
||||
let fileExtension = completeFileName.split('.')[1]
|
||||
|
||||
@@ -7,7 +7,13 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "El Client, junto con el TS y la UI es uno de los tres componentes centrales del Software Superalgos.",
|
||||
"updated": 1624379422979
|
||||
"updated": 1624379422979,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Клиент вместе с TS и UI является одним из трех основных компонентов программного обеспечения Superalgos.\n",
|
||||
"updated": 1635511193244
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -9,6 +9,11 @@
|
||||
"text": "La Community, o la Superalgos Community, es el grupo de entidades que participan en el proyecto Superalgos, ya sea contribuyendo activamente al avance del proyecto o utilizando pasivamente el software Superalgos.",
|
||||
"updated": 1628046272721,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Сообщество, или Сообщество Superalgos - это группа организаций, участвующих в проекте Superalgos или активно способствующих продвижению проекта, или пассивно использующих Superalgos Network.",
|
||||
"updated": 1635453748177
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"type": "Function Library",
|
||||
"definition": {
|
||||
"text": "It is a collection of functions related to a single topic. The topic is usuarlly expressed at the Function Libray's name.",
|
||||
"text": "It is a collection of functions related to a single topic. The topic is usually expressed at the Function Library's name.",
|
||||
"updated": 1614787845534
|
||||
},
|
||||
"paragraphs": [
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"type": "LF",
|
||||
"definition": {
|
||||
"text": "LF is the abbreviation of Low Frequency, and most likey refering to the Low Frequency Trading Bot implemented at the Masters Trading Mine.",
|
||||
"text": "LF is the abbreviation of Low Frequency, and most likely referring to the Low Frequency Trading Bot implemented at the Masters Trading Mine.",
|
||||
"updated": 1611577213413
|
||||
},
|
||||
"paragraphs": [
|
||||
|
||||
+5
@@ -9,6 +9,11 @@
|
||||
"text": "Se refiere a un Workspace creado por un usuario, contribuido al proyecto como un plugin y distribuido con todo el paquete de software. Plugin workspaces son útiles para dar acceso a los usuarios a estrategias, demostraciones, tutoriales o áreas del sistema en desarrollo listas para ejecutar.",
|
||||
"updated": 1624493472781,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Плагин Рабочее пространство относится к Workspace, созданному пользователем, внесенному в проект в виде плагина и распространяемому вместе с программным пакетом. Рабочие области плагинов полезны для предоставления пользователям доступа к готовым к запуску стратегиям, демонстрациям, учебным пособиям или введениям в области разрабатываемой системы.\n",
|
||||
"updated": 1635629179582
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+8
-1
@@ -2,7 +2,14 @@
|
||||
"type": "Superalgos Network",
|
||||
"definition": {
|
||||
"text": "The Superalgos Network is an open, peer-to-peer network, currently in the making. The network will enable users to set up their Clients to interact with other Clients. Such connectivity enables the exchange and dissemination of products and services from and to users.",
|
||||
"updated": 1630096650321
|
||||
"updated": 1630096650321,
|
||||
"translations": [
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Сеть Superalgos - это открытая одноранговая сеть, которая в настоящее время находится в процессе создания. Сеть позволит пользователям настраивать своих Клиентов для взаимодействия с другими Клиентами. Такая сеть обеспечивает обмен и распространение продуктов и услуг между пользователями.\n",
|
||||
"updated": 1635453664831
|
||||
}
|
||||
]
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
|
||||
@@ -7,7 +7,13 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "UI es una abreviatura de \"Interfaz de usuario\" (user Interface), que se refiere a la pantalla de operación y al método de operación del software. En Superalgos, el UI es una aplicación web que se ejecuta en un navegador de Internet.",
|
||||
"updated": 1624282520607
|
||||
"updated": 1624282520607,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "UI - это аббревиатура пользовательского интерфейса, которая относится к экрану управления и способу работы программного обеспечения. В Superalgos пользовательский интерфейс представляет собой веб-приложение, которое запускается в Интернет-браузере.",
|
||||
"updated": 1635580805809
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+7
-1
@@ -6,7 +6,13 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Un backtesting sessiones un modo de trading mediante el cual la instancia del bot de trading lee datos históricos del mercado en un rango de fecha y hora definido por el usuario, aplica las reglas definidas en el Trading System asociado y genera una simulación trading.",
|
||||
"updated": 1624454803124
|
||||
"updated": 1624454803124,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Сессия Обратного тестирования - это торговый режим, с помощью которого экземпляр торгового бота считывает исторические рыночные данные в заданном пользователем диапазоне дат и времени, применяет правила, определенные в соответствующей торговой системе и генерирует торговую симуляцию.",
|
||||
"updated": 1635592132857
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+7
-1
@@ -6,7 +6,13 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "El charting space es la jerarquía que gobierna la configuración de los gráficos y el espacio bidimensional en el que se dibujan los gráficos.",
|
||||
"updated": 1624286299025
|
||||
"updated": 1624286299025,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Пространство построения графиков - это иерархия, которая управляет конфигурацией диаграмм и двумерным пространством, в котором создаются диаграммы.",
|
||||
"updated": 1635609547337
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -6,7 +6,13 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Un data product representa la recopilación de conjuntos de datos generados por la instancia de un bot según se define en la mina de datos o mina de trading correspondiente.",
|
||||
"updated": 1624284305118
|
||||
"updated": 1624284305118,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Продукт данных представляет собой совокупность наборов данных, сгенерированных экземпляром бота, как определено в соответствующей шахте данных или торговой шахте.",
|
||||
"updated": 1635595053948
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -33,7 +33,13 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Data tasks refiere a la minería de datos, es decir, la actividad de procesamiento de datos. Necesitarás procesar datos para alimentar gráficos y para que sus sistemas de trading puedan tomar decisiones basadas en información de calidad.",
|
||||
"updated": 1624283536808
|
||||
"updated": 1624283536808,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Задачи обработки данных относятся к интеллектуальному анализу данных, т.е. к деятельности по обработке данных. Вам необходимо обрабатывать данные для подачи графиков, чтобы Ваши торговые системы могли принимать решения на основе качественной информации.",
|
||||
"updated": 1635516654645
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -7,7 +7,13 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "El Design Space es el entorno visual que alberga todas las definiciones de usuario y del sistema. En términos prácticos, es el espacio negro debajo del control deslizante que divide la pantalla horizontalmente, separando el Design Space en la parte inferior del\n Charting Space en la parte superior. Como jerarquía, presenta nodos que permiten al usuario controlar ciertos aspectos del aspecto, la sensación y el comportamiento del espacio.",
|
||||
"updated": 1624286217210
|
||||
"updated": 1624286217210,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Пространство дизайна - это визуальная среда, в которой размещаются все системные и пользовательские определения. С практической точки зрения - это черное пространство под ползунком, которое разделяет экран по горизонтали, отделяя пространства дизайна внизу от Charting Space - сверху. Как иерархия, он сожержит узлы, которые позволяют контролировать определенные аспекты внешнего вида, ощущения и поведения пространства.",
|
||||
"updated": 1635612281255
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+7
-1
@@ -6,7 +6,13 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "\nEl nodo exchange data tasks organiza las tareas de minería de datos por mercado. Es decir, cada mercado instalado en el sistema tiene un nodo de exchange data tasks que agrupa datos del mercado correspondientes a dicho mercado.\n",
|
||||
"updated": 1624283490092
|
||||
"updated": 1624283490092,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Узел Задачи обмена данными организует задачи интеллектуального анализа данных по обмену. Т.е. каждая биржа, установленная в системе, умеет узел Задач обмена данными, объединяющий все задачи рыночных данных, соответствующие указанной бирже.",
|
||||
"updated": 1635591907050
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Usually, exchanges require autentication via your exchange account key for monetary transactions only. However, some exchanges may require autentication in other contexts as well, for instance, to retrieve information above a certain quota, or to retrieve raw trades data instead of OHLCV data."
|
||||
"text": "Usually, exchanges require authentication via your exchange account key for monetary transactions only. However, some exchanges may require autentication in other contexts as well, for instance, to retrieve information above a certain quota, or to retrieve raw trades data instead of OHLCV data."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
|
||||
+7
-1
@@ -6,7 +6,13 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Un live trading session es un modo de trading mediante el cual el trading bot lee instantáneamente una fuente de datos de mercado en vivo, aplica las reglas definidas en el Trading System asociado, coloca las órdenes correspondientes en el exchange asociado y almacena los productos de datos definidos.",
|
||||
"updated": 1624375128544
|
||||
"updated": 1624375128544,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Торговая сессия в реальном времени - это режим торговли, с помощью которого экземпляр торгового бота считывает поток рыночных данных в реальном времени, применяет правила, определенные в соответствующей торговой системе, размещает заданные ордера на соответствующей бирже и сохраняет определенные данные продуктов.",
|
||||
"updated": 1635452817783
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -6,7 +6,13 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Un market es la definición de assets (i.e.: BTC-USDT) listados como mercado en el correspondiente exchange.",
|
||||
"updated": 1628045938159
|
||||
"updated": 1628045938159,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Рынок - это определение пары активов (например, BTC-USDT), перечисленных на соответствующей бирже.",
|
||||
"updated": 1635592307113
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+5
@@ -47,6 +47,11 @@
|
||||
"text": "El nodo Production Trading Tasks organiza sesiones de trading incluyendo trading en vivo.",
|
||||
"updated": 1624490715363,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Узел Производственные торговые задачи организует торговые сессии, включающие Торговлю в режиме реального времени.",
|
||||
"updated": 1635517287447
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+5
@@ -42,6 +42,11 @@
|
||||
"text": "El nodo Testing Trading Tasks organiza sesiones de trading que implican la prueba de los sistemas de trading.",
|
||||
"updated": 1624490698932,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Узел Тестирование торговых задач организует торговые сессии, включающие Тестирование торговых систем.",
|
||||
"updated": 1635517242993
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -17,7 +17,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Toda hierarchy (jerarquía) que no esté incluida como plugin (enchufe).",
|
||||
"updated": 1633089492790
|
||||
"updated": 1633089492790,
|
||||
"style": "List"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -28,7 +29,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Nodos que puedan estar flotando por ahí, desconectados de jerarquías",
|
||||
"updated": 1633089543104
|
||||
"updated": 1633089543104,
|
||||
"style": "List"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -40,7 +42,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "nformación relacionada a la posición física y al estado de todos los nodos dentro del espacio de diseño, incluyendo aquellos nodos sueltos.",
|
||||
"updated": 1633089604851
|
||||
"updated": 1633089604851,
|
||||
"style": "List"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -51,7 +54,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Un workspace no es parte de ninguna jerarquía, por el contrario, las contiene.",
|
||||
"updated": 1633089633238
|
||||
"updated": 1633089633238,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -62,7 +66,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Loading Workspaces (Subiendo espacios de trabajo)",
|
||||
"updated": 1633089674625
|
||||
"updated": 1633089674625,
|
||||
"style": "Title"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -73,7 +78,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Los usuarios pueden trabajar en muchos workspaces al mismo tiempo, pero uno solo debe ser subido al sistema en cualquier momento.",
|
||||
"updated": 1633089722388
|
||||
"updated": 1633089722388,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -90,7 +96,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "El workspace que obtenga de un tercero puede incluirlo en su carpeta de mis workspaces, para poderlos abrir desde el tabulador. También puedes sostener el archivo y soltarlo en el workspace",
|
||||
"updated": 1633106859191
|
||||
"updated": 1633106859191,
|
||||
"style": "Success"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -110,7 +117,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Saving Workspaces (Guardando espacios de trabajo)",
|
||||
"updated": 1633107199561
|
||||
"updated": 1633107199561,
|
||||
"style": "Title"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -122,7 +130,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Todo workspace que sea grabado por un usuario es un user workspace.",
|
||||
"updated": 1633106992641
|
||||
"updated": 1633106992641,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -134,7 +143,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Todo user workspace tiene fondo violeta en el menú de los workspaces a la izquierda.",
|
||||
"updated": 1633107024679
|
||||
"updated": 1633107024679,
|
||||
"style": "Note"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -146,7 +156,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Los workspaces son guardados como archivos JSON en la carpeta My-workspaces.",
|
||||
"updated": 1633107047310
|
||||
"updated": 1633107047310,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -158,7 +169,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Puede guardar un workspace manualmente utilizando la siguiente combinación de teclas:",
|
||||
"updated": 1633107089375
|
||||
"updated": 1633107089375,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -175,7 +187,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Si hace un backup de un workspace se bajará el mismo archivo a su carpeta de Downloads. Este es un buen modo de almacenar versiones secuencialmente en caso de que alguna vez necesite regresar a una versión anterior.",
|
||||
"updated": 1633107143583
|
||||
"updated": 1633107143583,
|
||||
"style": "Success"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -186,7 +199,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Plugin Workspaces ( Conectando espacios de trabajo)",
|
||||
"updated": 1633107189340
|
||||
"updated": 1633107189340,
|
||||
"style": "Title"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -198,7 +212,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Superalgos incluye un abanico de plugin workspaces. Estos son workspaces pre-configurados montados para propósitos determinados, por ejemplo, para contener tutoriales, estrategias demo, proyectos específicos, y otros.",
|
||||
"updated": 1633107236673
|
||||
"updated": 1633107236673,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -210,7 +225,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "En el tabulador de workspaces, los plugin workspaces estan mencionados así sobre un fondo negro que los diferencia de tus propios workspaces.",
|
||||
"updated": 1633107278282
|
||||
"updated": 1633107278282,
|
||||
"style": "Note"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -222,7 +238,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Cuando sube, modifica y guarda un plugin workspace, el plugin permanece intacto, esto significa que el plugin no se modifica sino que un nuevo archivo se crea en tu carpeta de My-workspaces. Este archivo es una copia del plugin con las modificaciones que ha introducido. La copia está guardada con el nombre del nodo de workspace, que normalmente es el mismo nombre del plugin. Para grabarlo con un nombre diferente debe cambiar el título del nodo y guardarlo",
|
||||
"updated": 1633107369531
|
||||
"updated": 1633107369531,
|
||||
"style": "Important"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -233,7 +250,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Creating Workspaces (Creando workspaces)",
|
||||
"updated": 1633107483723
|
||||
"updated": 1633107483723,
|
||||
"style": "Title"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -253,7 +271,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Deleting Workspaces ( Borrando workspaces)",
|
||||
"updated": 1633107676804
|
||||
"updated": 1633107676804,
|
||||
"style": "Title"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -264,7 +283,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Para borrar un Workspace, borre el correspondiente archivo del Workspace dentro de la aplicación del sistema de archivos de su sistema operativo.",
|
||||
"updated": 1633107728584
|
||||
"updated": 1633107728584,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -278,6 +298,11 @@
|
||||
"text": "Un Workspace (espacio de trabajo) es una entidad que almacena toda la información generada por el usuario y el sistema, excluyendo el estado y el contenido de los complementos. En términos técnicos, un espacio de trabajo es un archivo JSON.",
|
||||
"updated": 1633089108346,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Рабочее пространство - это объект, хранящий всю системную и пользовательскую информацию, за исключением состояния и содержимого плагинов. С технической точки зрения рабочее пространство - это файл JSON.",
|
||||
"updated": 1635629322791
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+14
-2
@@ -21,7 +21,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Ihre Beiträge wurden in Ihren Superalgos Fork hochgeladen und ein Pull Request wurde an das Haupt-Repository von Superalgos gesendet.",
|
||||
"updated": 1634163888387
|
||||
"updated": 1634163888387,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Katkılarınız Superalgos Çatalınıza yüklendi ve ana Superalgos deposuna bir Çekme Talebi gönderildi.",
|
||||
"updated": 1635576753406
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -40,7 +46,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Es ist keine weitere Aktion von Ihnen erforderlich. Jemand wird Ihren Pull Request überprüfen und ihn in die neueste Version der Software einfügen, wenn alles in Ordnung ist. Wenn Ihre Änderungen aus irgendeinem Grund abgelehnt werden, müssen Sie das Problem auf Github.com verfolgen.",
|
||||
"updated": 1634163896241
|
||||
"updated": 1634163896241,
|
||||
"style": "Success"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Başka bir işlem yapmanız gerekmez. Birisi, Çekme Talebinizi gözden geçirecek ve her şeyin yolunda olması durumunda onu yazılımın en son sürümüyle birleştirecektir. Değişiklikleriniz herhangi bir nedenle reddedilirse, sorunu Github.com adresinden takip etmeniz gerekecektir.",
|
||||
"updated": 1635576806375
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+7
-1
@@ -11,6 +11,11 @@
|
||||
"text": "Superalgos conecta con varios plugin workspaces configurados por la comunidad para facilitar la incorporación de usuarios. Este tema cubre cada uno de ellos y explica su propósito.",
|
||||
"updated": 1628037130662,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Superalgos поставляется с несколькими рабочими областями плагинов, созданными сообществом для облегчения адаптации пользователей. Эта тема охватывает каждый из них и объясняет их назначение.",
|
||||
"updated": 1635629505051
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -23,7 +28,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Cada plugin workspace incluído en Superalgos ha sido cnstruido para un propósito específico.",
|
||||
"updated": 1633281831625
|
||||
"updated": 1633281831625,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+8
-1
@@ -4,7 +4,14 @@
|
||||
"type": "Getting Started Tutorials Plugin Workspace",
|
||||
"definition": {
|
||||
"text": "This workspace is the first point of contact with Superalgos. Its purpose is to get new users familiar with all the basic aspects of Superalgos.",
|
||||
"updated": 1630066493238
|
||||
"updated": 1630066493238,
|
||||
"translations": [
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Рабочее пространство плагина является первой точкой соприкосновения с Superalgos. Его цель - познакомить новых пользователей со всеми базовыми аспектами Superalgos.",
|
||||
"updated": 1635628485258
|
||||
}
|
||||
]
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
|
||||
+23
-3
@@ -3,13 +3,13 @@
|
||||
"pageNumber": 1,
|
||||
"type": "Data Mining - Introduction",
|
||||
"definition": {
|
||||
"text": "Data Mining in Superalgos means extracting data from external sources and processing that data in order to have it ready for consumption by trading strategies.",
|
||||
"updated": 1622200589433,
|
||||
"text": "Data Mining in Superalgos means extracting data from external sources and processing that data in order to have it ready for consumption by trading strategies.\n",
|
||||
"updated": 1635521444812,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Data Mining in Superalgos bedeutet die Extraktion von Daten aus externen Quellen und die Verarbeitung dieser Daten, um sie für Handelsstrategien nutzbar zu machen. Ins deutsche übersetzt von gitforkgit.",
|
||||
"updated": 1634502828004
|
||||
"updated": 1635521809616
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -26,6 +26,22 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "At the end of this Docs-Chapter there is a Video Series that shows you the entire process of building an indicator, step by step. If you feel that you do not know how to practically perform the steps explained in this chapter, just have a look at the last article: \"Data Mining - How to Build an Indicator - Video Series\"",
|
||||
"updated": 1635521763763,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Am Ende dieses Docs-Kapitels finden Sie eine Video-Serie, die Ihnen den gesamten Prozess der Erstellung eines Indicators Schritt für Schritt zeigt. Wenn Sie das Gefühl haben, dass Sie nicht wissen, wie Sie die in diesem Kapitel erläuterten Schritte praktisch durchführen können, schauen Sie sich einfach den letzten Artikel an: \"Data Mining - How to Build an Indicator - Video Series\"",
|
||||
"updated": 1635521851687
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "The Big Picture",
|
||||
@@ -38,6 +54,10 @@
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": ""
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "All of the data inside the Superalgos system has an origin somewhere outside the system, usually somewhere on the Internet. There are currently 3 ways to bring data into the system:",
|
||||
|
||||
+8
-1
@@ -4,7 +4,14 @@
|
||||
"type": "Data Mining - Plotters",
|
||||
"definition": {
|
||||
"text": "Plotters read data products created by bots and map certain coordinate points to use them as vertices for polygons, which are assigned styles to create graphic representations of the underlying data.",
|
||||
"updated": 1611431276108
|
||||
"updated": 1611431276108,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Plotter lesen von Bots erstellte Datenprodukte und bilden bestimmte Koordinatenpunkte ab, um sie als Eckpunkte für Polygone zu verwenden, denen Stile zugewiesen werden, um grafische Darstellungen der zugrunde liegenden Daten zu erstellen.",
|
||||
"updated": 1635368884704
|
||||
}
|
||||
]
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
|
||||
+8
-1
@@ -4,7 +4,14 @@
|
||||
"type": "Data Mining - Plotters - Shapes",
|
||||
"definition": {
|
||||
"text": "Shapes define coordinate points to use as vertex for polygons, which are assigned styles.",
|
||||
"updated": 1611432676884
|
||||
"updated": 1611432676884,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Shapes definieren Koordinatenpunkte, die als Scheitelpunkte für Polygone verwendet werden, denen Stile zugewiesen werden.",
|
||||
"updated": 1635368948734
|
||||
}
|
||||
]
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
|
||||
+129
-17
@@ -4,33 +4,75 @@
|
||||
"type": "Data Mining - How to Build an Indicator - Video Series",
|
||||
"definition": {
|
||||
"text": "This video series goes through the entire process of building an indicator, step by step.",
|
||||
"updated": 1611434001380
|
||||
"updated": 1611434001380,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "In dieser Videoserie wird der gesamte Prozess der Erstellung eines Indicators Schritt für Schritt erläutert.",
|
||||
"updated": 1635521417011
|
||||
}
|
||||
]
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This video series focuses on the “how to” aspect of building an indicator. It does not go through definitions nor does it explain the underlying concepts. Therefore, it is highly recommended to read the data mines page as well as the pages about indicator bots before attempting to build an indicator.",
|
||||
"updated": 1611434011723
|
||||
"updated": 1611434011723,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Diese Videoreihe konzentriert sich auf den \"How to\"-Aspekt der Erstellung eines Indikators. Es werden weder Definitionen erläutert noch die zugrunde liegenden Konzepte erklärt. Es wird daher dringend empfohlen, die Seite über Datenminen sowie die Seiten über Indikator-Bots zu lesen, bevor Sie versuchen, einen Indikator zu erstellen.",
|
||||
"updated": 1635522063282
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Reading the whole documentation on indicators and plotters is certainly desirable and will save you time in the long run.",
|
||||
"updated": 1611434037598
|
||||
"updated": 1611434037598,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die ganze docs zu lesen hilft Verständnis über Indikatoren und Plotter zu erlangen und ist sicherlich wünschenswert und wird Ihnen langfristig Zeit sparen.",
|
||||
"updated": 1635522428663
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "The video series on how to build an indicator was produced for the Beta 5 version of the system; however, the functionality still works similarly. That said, there may be minor differences that are yet to be documented. Please drop by the Develop group and ask any questions you may have, particularly if something is not working as expected, or as instructed in the videos.",
|
||||
"updated": 1611434212027
|
||||
"text": "The video series on how to build an indicator was produced for the Beta 5 version (inbetween we are at Beta12) of the system; however, the functionality still works similarly. That said, there may be minor differences that are yet to be documented. Please drop by the Develop group and ask any questions you may have, particularly if something is not working as expected, or as instructed in the videos. The group is linked in the footer.",
|
||||
"updated": 1635522913439,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die Videoserie über die Erstellung eines Indicators wurde für die Beta 5 Version des Systems produziert (inzwischen sind wir bei Beta 12); die Funktionalität funktioniert jedoch immer noch ähnlich. Allerdings kann es geringfügige Unterschiede geben, die noch zu dokumentieren sind. Schauen Sie in der Develop group vorbei und stellen Sie Ihre Fragen, insbesondere wenn etwas nicht wie erwartet oder wie in den Videos beschrieben funktioniert. Die Gruppe ist in der Fußzeile verlinkt.",
|
||||
"updated": 1635522983953
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Step 1 - Visual Definitions",
|
||||
"updated": 1611434706444
|
||||
"updated": 1611434706444,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Schritt 1 - \"Visual Definitions\":",
|
||||
"updated": 1635523040592
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Setting up the Multi-Time-Frame-Market and Multi-Time-Frame-Daily process definitions, status and data dependencies, execution events, and dataset definitions for the main product.",
|
||||
"updated": 1611434720860
|
||||
"updated": 1611434720860,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Einrichtung der Prozessdefinitionen für den Multi-Time-Frame-Market und den Multi-Time-Frame-Daily, der Status- und Datenabhängigkeiten, der Ausführungsereignisse (execution events) und der Dataset-Definitionen für das main product.",
|
||||
"updated": 1635523111913
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Youtube",
|
||||
@@ -40,12 +82,26 @@
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Step 2 - Code & Record Definition",
|
||||
"updated": 1611435476284
|
||||
"updated": 1611435476284,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Schritt 2 - \"Code & Record Definition\":",
|
||||
"updated": 1635523134273
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Reviewing common coding practice and configuring record properties and their formulas.",
|
||||
"updated": 1611435495283
|
||||
"updated": 1611435495283,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Überprüfung gängiger coding (programmier)-praktiken und Konfiguration von record properties und deren Formeln.",
|
||||
"updated": 1635523212258
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Youtube",
|
||||
@@ -55,12 +111,26 @@
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Step 3 - Testing & Troubleshooting",
|
||||
"updated": 1611435879103
|
||||
"updated": 1611435879103,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Schritt 3 - \"Testing & Troubleshooting\":",
|
||||
"updated": 1635523224909
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Setting up a data mining task to run the bot instance, checking the dataset files for errors, and troubleshooting common issues with the code and the process definitions.",
|
||||
"updated": 1611435892931
|
||||
"updated": 1611435892931,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Einrichten einer Data-Mining-Task zur Ausführung der Bot-Instanz, Prüfen der Datensatz-Dateien auf Fehler und Beheben allgemeiner Probleme mit dem Code und den Prozessdefinitionen (process definitions).",
|
||||
"updated": 1635523304414
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Youtube",
|
||||
@@ -70,12 +140,26 @@
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Step 4 - Plotters",
|
||||
"updated": 1611435948687
|
||||
"updated": 1611435948687,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Schritt 4 - Plotters",
|
||||
"updated": 1635523314690
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "How to create the device that will interpret the dataset generated by the indicator and render a graphical representation over the charts.",
|
||||
"updated": 1611435955116
|
||||
"updated": 1611435955116,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "So erstellen Sie das Gerät, das den vom Indikator erzeugten Datensatz interpretiert und eine grafische Darstellung in den Diagrammen wiedergibt.",
|
||||
"updated": 1635523333565
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Youtube",
|
||||
@@ -85,17 +169,38 @@
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Step 5 - Trading Bot Dependencies",
|
||||
"updated": 1611436344230
|
||||
"updated": 1611436344230,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Schritt 5 - \"Trading Bot Dependencies\":",
|
||||
"updated": 1635523346918
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Before you may use the new indicator on a trading system, you must create the corresponding dependencies on the Low frequency trading bot.",
|
||||
"updated": 1611436373962
|
||||
"updated": 1611436373962,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Bevor Sie den neuen Indikator in einem Handelssystem verwenden können, müssen Sie die entsprechenden Abhängigkeiten auf dem Low Frequency Trading Bot erstellen.",
|
||||
"updated": 1635523409654
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "To call the properties of a new indicator from within the definitions of a trading system, you first need to let the Low Frequency trading bot that your data mine exists. To do this, you need to add the corresponding data dependencies at the trading bot’s Trading process definitions.",
|
||||
"updated": 1611436404033
|
||||
"updated": 1611436404033,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Um die Eigenschaften eines neuen Indicator aus den Definitionen eines trading system heraus aufrufen zu können, müssen Sie zunächst dem Low Frequency-trading bot mitteilen, dass Ihre data mine existiert. Zu diesem Zweck müssen Sie die entsprechenden data dependencies zu den trading bot’s Trading process definitions des Trading-Bots hinzufügen.",
|
||||
"updated": 1635523501772
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Gif",
|
||||
@@ -105,7 +210,14 @@
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "Because the Low Frequency trading bot is a plugin, the modifications you make to the hierarchy do not persist after closing the frontend app. The workaround is to take a backup of the hierarchy after making the modifications, and replace the plugin file with the backup. Should you decide to contribute your data mine to the project, we will incorporate the dependencies in the official release.",
|
||||
"updated": 1611436549743
|
||||
"updated": 1611436549743,
|
||||
"translations": [
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Da es sich beim Low Frequency Trading Bot um ein Plugin handelt, bleiben die Änderungen, die Sie an der Hierarchie vornehmen, nach dem Schließen der Frontend-App nicht erhalten. Die Abhilfe besteht darin, nach den Änderungen ein Backup der Hierarchie zu erstellen und die Plugin-Datei durch das Backup zu ersetzen. Sollten Sie sich dazu entschließen, Ihre data mine zum Projekt beizusteuern, werden wir die dependencies in die offizielle Version einbauen.",
|
||||
"updated": 1635523596673
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
+14
-2
@@ -21,7 +21,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Der Befehl docs.reindex hat den Wiederaufbau des Docs Search Engine Index abgeschlossen.",
|
||||
"updated": 1633902732987
|
||||
"updated": 1633902732987,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "\"docs.reindex\" komutu, Dokümanlar Arama Motoru Dizini'ni yeniden oluşturmayı tamamladı.",
|
||||
"updated": 1635576136670
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -46,7 +52,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Der Index wurde neu erstellt und enthält nun alle Änderungen, die Sie seit dem Öffnen der Benutzeroberfläche (UI) oder seit der letzten Ausführung des Befehls docs.reindex vorgenommen haben. Das bedeutet, dass neu erstellte Inhalte jetzt durchsuchbar sind. Änderungen im Workspace wurden ebenfalls in den Index aufgenommen.",
|
||||
"updated": 1633903028672
|
||||
"updated": 1633903028672,
|
||||
"style": "Success"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Dizin yeniden oluşturuldu ve artık kullanıcı arabirimini açtığınızdan veya docs.reindex komutunu son çalıştırdığınızdan beri yaptığınız en son değişiklikleri içeriyor. Bu, oluşturulan yeni içeriğin artık aranabilir olduğu anlamına gelir. Çalışma Alanındaki değişiklikler de dizine girilmiştir.",
|
||||
"updated": 1635576166278
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "The shot answer is becasue the Stage Size Filled did not reach the value of the Stage Target Size.",
|
||||
"text": "The short answer is because the Stage Size Filled did not reach the value of the Stage Target Size.",
|
||||
"updated": 1615100332173
|
||||
},
|
||||
{
|
||||
|
||||
+1
-1
@@ -96,7 +96,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "For the rest of this guide, we will assume that you are using the Getting Started workspace that comes as a Plugin. If you are not, please load that workpace and close the Welcome tutorial.",
|
||||
"text": "For the rest of this guide, we will assume that you are using the Getting Started workspace that comes as a Plugin. If you are not, please load that workspace and close the Welcome tutorial.",
|
||||
"updated": 1616009292308
|
||||
},
|
||||
{
|
||||
|
||||
+1
-1
@@ -48,7 +48,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Look for any information there related to your favorite exchange. You will probably need to undestand also the different types of parameters you can send to CCXT in order to adapt its behaviour at the specific command of fetching OHLCVs objects.",
|
||||
"text": "Look for any information there related to your favorite exchange. You will probably need to understand also the different types of parameters you can send to CCXT in order to adapt its behaviour at the specific command of fetching OHLCVs objects.",
|
||||
"updated": 1614591710131
|
||||
},
|
||||
{
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@
|
||||
"pageNumber": "4",
|
||||
"type": "Exchange Raw Data - Locate The Sensor Bot Code",
|
||||
"definition": {
|
||||
"text": "Open with VS Code the Task Server Folder and inmediatelly after that, add the Projects Folder to the VS Code workspace.",
|
||||
"text": "Open with VS Code the Task Server Folder and immediately after that, add the Projects Folder to the VS Code workspace.",
|
||||
"updated": 1614591834868
|
||||
},
|
||||
"paragraphs": [
|
||||
@@ -26,7 +26,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "This is the single code that is executed to extract candles and volumen in 1 minute time frame from any exchange via the CCXT library. Now you can set a breakpoint anywhere in the code to start debugging from there."
|
||||
"text": "This is the single code that is executed to extract candles and volume in 1 minute time frame from any exchange via the CCXT library. Now you can set a breakpoint anywhere in the code to start debugging from there."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
|
||||
+1
-1
@@ -92,7 +92,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "That migh be the reason why it is not starting the debugging session."
|
||||
"text": "That might be the reason why it is not starting the debugging session."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
"pageNumber": "6",
|
||||
"type": "Exchange Raw Data - Find Out Why Is Not Working",
|
||||
"definition": {
|
||||
"text": "With the intelligence you gathered at Exchange Raw Data - Research Your Exchange combined with the insight provided by debuging the code step by step, you might have figure out how why it is not working.",
|
||||
"text": "With the intelligence you gathered at Exchange Raw Data - Research Your Exchange combined with the insight provided by debugging the code step by step, you might have figure out how why it is not working.",
|
||||
"updated": 1614592591570
|
||||
},
|
||||
"paragraphs": [
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@
|
||||
"pageNumber": "7",
|
||||
"type": "Exchange Raw Data - Fix The Problem",
|
||||
"definition": {
|
||||
"text": "At this point you will probably know if it is possible or not to extact historical information from your Favorite Exchange or not.",
|
||||
"text": "At this point you will probably know if it is possible or not to extract historical information from your Favorite Exchange or not.",
|
||||
"updated": 1614593270288
|
||||
},
|
||||
"paragraphs": [
|
||||
@@ -18,7 +18,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you found that your Favorite Exchange works with some special config, please contac the Team so that is can include that config in the next release and move the exchange to the branch of Tested exchanges."
|
||||
"text": "If you found that your Favorite Exchange works with some special config, please contact the Team so that is can include that config in the next release and move the exchange to the branch of Tested exchanges."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
|
||||
+2
-2
@@ -14,7 +14,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Basically Superalgos consists of two different parts, the UI and the CLI, that live togheter. To communicate with us they use 3 different parameters defined in the Environment.js file (see default values below) and are the following:",
|
||||
"text": "Basically Superalgos consists of two different parts, the UI and the CLI, that live together. To communicate with us they use 3 different parameters defined in the Environment.js file (see default values below) and are the following:",
|
||||
"updated": 1620714602413
|
||||
},
|
||||
{
|
||||
@@ -44,7 +44,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "In the above screenshot you can see two different installation of SA running togheter at the same time. To avoi any type of conflict it's suggested to change not only the ports being used but olso to replace'localhost'with the IP of your local lan. In Windows you can know which IP is assigned to your machine with a simple CLI command. Just type ipconfig and you will presented with details about your local lan as in the following screenshot. IPv4 Address is your local IP:",
|
||||
"text": "In the above screenshot you can see two different installation of SA running together at the same time. To avoid any type of conflict it's suggested to change not only the ports being used but also to replace 'localhost' with the IP of your local lan. In Windows you can know which IP is assigned to your machine with a simple CLI command. Just type ipconfig and you will presented with details about your local lan as in the following screenshot. IPv4 Address is your local IP:",
|
||||
"updated": 1620717800744
|
||||
},
|
||||
{
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Maybe you realized that you are doing repetitive actions at the Design Space and you can benefit from automating them. If your actions are constrained to manipulating the nodes at the workspace, by either creating new nodes, deleting existing ones, changing nodes configs, establishing references or something similar, then you might be able to create an Action function that can automate all this. This will allow you to complete the action with the click of a button and stop doing those repetitive tasks youself. Not to mention help make Superalgos easier to use for everyone once you contribute your action!",
|
||||
"text": "Maybe you realized that you are doing repetitive actions at the Design Space and you can benefit from automating them. If your actions are constrained to manipulating the nodes at the workspace, by either creating new nodes, deleting existing ones, changing nodes configs, establishing references or something similar, then you might be able to create an Action function that can automate all this. This will allow you to complete the action with the click of a button and stop doing those repetitive tasks yourself. Not to mention help make Superalgos easier to use for everyone once you contribute your action!",
|
||||
"updated": 1628255167092
|
||||
},
|
||||
{
|
||||
|
||||
+3
-3
@@ -19,7 +19,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Warning",
|
||||
"text": "Be carefull not to damage anything in the App Schema file while editing it. You will get into trouble if you do. It can not only cause the UI to not load, but also damage the workspace you are working at.",
|
||||
"text": "Be careful not to damage anything in the App Schema file while editing it. You will get into trouble if you do. It can not only cause the UI to not load, but also damage the workspace you are working at.",
|
||||
"updated": 1628255452468
|
||||
},
|
||||
{
|
||||
@@ -34,7 +34,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Locate inside the file, the definition of the Node Type you want to add the new Action to. Once localted add a menu item object to the menuItems array, like in the following example:"
|
||||
"text": "Locate inside the file, the definition of the Node Type you want to add the new Action to. Once located add a menu item object to the menuItems array, like in the following example:"
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
@@ -85,7 +85,7 @@
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "disableIfPropertyIsDefined: true when you want the Menu Item to be disabled if a certain property of the Node object is defined at runtime. This is used in conbination with the property propertyToCheckFor in the special situation that the Menu Item is used to create a child for this Node that is not part of a array of children and there can only be one child of that type.",
|
||||
"text": "disableIfPropertyIsDefined: true when you want the Menu Item to be disabled if a certain property of the Node object is defined at runtime. This is used in combination with the property propertyToCheckFor in the special situation that the Menu Item is used to create a child for this Node that is not part of a array of children and there can only be one child of that type.",
|
||||
"updated": 1614789912636
|
||||
},
|
||||
{
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The basic procedure is quite straight forward. First add the function name to the thisObject and then write your function at the most appropiate place at the Function Library.",
|
||||
"text": "The basic procedure is quite straight forward. First add the function name to the thisObject and then write your function at the most appropriate place at the Function Library.",
|
||||
"updated": 1628257461177
|
||||
},
|
||||
{
|
||||
|
||||
+2
-2
@@ -9,7 +9,7 @@
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "It is a very good idea to invest some time at the Utilities folder, scaning the files in there to see what you already have available to use at your actions. You will see that other actions in Function Libraries heavily rely on utilities functions defined at one of the files within the Utilities folder.",
|
||||
"text": "It is a very good idea to invest some time at the Utilities folder, scanning the files in there to see what you already have available to use at your actions. You will see that other actions in Function Libraries heavily rely on utilities functions defined at one of the files within the Utilities folder.",
|
||||
"updated": 1628257595439
|
||||
},
|
||||
{
|
||||
@@ -49,7 +49,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This is the way you programatically manipulate the config of a Node:"
|
||||
"text": "This is the way you programmatically manipulate the config of a Node:"
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
|
||||
+2
-2
@@ -9,7 +9,7 @@
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "It is a very good idea to invest some time at the Function-Libraries folder, scaning the files in there to see what you already have available to use at your actions. You will see that other actions in Function Libraries heavily rely on functions defined at one of the files within the Function-Libraries folder.",
|
||||
"text": "It is a very good idea to invest some time at the Function-Libraries folder, scanning the files in there to see what you already have available to use at your actions. You will see that other actions in Function Libraries heavily rely on functions defined at one of the files within the Function-Libraries folder.",
|
||||
"updated": 1628257873103
|
||||
},
|
||||
{
|
||||
@@ -19,7 +19,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "At runtime, all Function Library objects will be already instantiated by the time your Action function code runs. You just need to get to the object that host the Function Library funtion you want to execute via the UI Global Object that is available to you. For exmaple:",
|
||||
"text": "At runtime, all Function Library objects will be already instantiated by the time your Action function code runs. You just need to get to the object that host the Function Library function you want to execute via the UI Global Object that is available to you. For example:",
|
||||
"updated": 1628257884243
|
||||
},
|
||||
{
|
||||
|
||||
+17
-17
@@ -23,7 +23,7 @@
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Receving Data: the Client receives via it's http interface notifications from external sources (like Trading View) and keep the data received in-memory. This happens independently of the Webhooks Sensor Bot, meaning that it does not matter if the Webhook Sensor Bot is running or not.",
|
||||
"text": "Receiving Data: the Client receives via it's http interface notifications from external sources (like Trading View) and keep the data received in-memory. This happens independently of the Webhooks Sensor Bot, meaning that it does not matter if the Webhook Sensor Bot is running or not.",
|
||||
"updated": 1615366502234
|
||||
},
|
||||
{
|
||||
@@ -124,11 +124,11 @@
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "At the Signals Provider node you will see a message of failure or success depending if the message was succesfuly delivered to the Client or not."
|
||||
"text": "At the Signals Provider node you will see a message of failure or success depending if the message was successfully delivered to the Client or not."
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "At the Client 's console, you will see 3 lines of logs, aknolidging that the message was received or if something was wrong, an error message with the cause."
|
||||
"text": "At the Client 's console, you will see 3 lines of logs, acknowledging that the message was received or if something was wrong, an error message with the cause."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
@@ -136,7 +136,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "[INFO] httpInterface -> Webhook -> New-Message -> Exchange-Market = binance-BTC-USDT\n[INFO] httpInterface -> Webhook -> New-Message -> messageReceived = Sell\n[INFO] httpInterface -> Webhook -> New-Message -> Messeges waiting to be Ferched by Webhooks Sensor Bot = 1",
|
||||
"text": "[INFO] httpInterface -> Webhook -> New-Message -> Exchange-Market = binance-BTC-USDT\n[INFO] httpInterface -> Webhook -> New-Message -> messageReceived = Sell\n[INFO] httpInterface -> Webhook -> New-Message -> Messages waiting to be Fetched by Webhooks Sensor Bot = 1",
|
||||
"updated": 1615370618823
|
||||
},
|
||||
{
|
||||
@@ -160,7 +160,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The default workspace does not feature these tasks. To create a task for the Webhooks sensor bot, you need to uninstall and re-install the corresponding market. The prcess of installing a market adds all the tasks needed to run all the bots defined at all Data Mines present at the workspace.",
|
||||
"text": "The default workspace does not feature these tasks. To create a task for the Webhooks sensor bot, you need to uninstall and re-install the corresponding market. The process of installing a market adds all the tasks needed to run all the bots defined at all Data Mines present at the workspace.",
|
||||
"updated": 1629361603647
|
||||
},
|
||||
{
|
||||
@@ -183,7 +183,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "2021-03-10T09:57:40.111Z Binance BTC/USDT Masters Webhooks Check-Webhook Main Loop # 3\n[INFO] httpInterface -> Webhook -> Fetch-Messages -> Exchange-Market = binance-BTC-USDT\n[INFO] httpInterface -> Webhook -> Fetch-Messages -> Messeges Fetched by Webhooks Sensor Bot = 0",
|
||||
"text": "2021-03-10T09:57:40.111Z Binance BTC/USDT Masters Webhooks Check-Webhook Main Loop # 3\n[INFO] httpInterface -> Webhook -> Fetch-Messages -> Exchange-Market = binance-BTC-USDT\n[INFO] httpInterface -> Webhook -> Fetch-Messages -> Messages Fetched by Webhooks Sensor Bot = 0",
|
||||
"updated": 1615370294905
|
||||
},
|
||||
{
|
||||
@@ -198,7 +198,7 @@
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "The Client accumulates the signas received.",
|
||||
"text": "The Client accumulates the signals received.",
|
||||
"updated": 1615370477786
|
||||
},
|
||||
{
|
||||
@@ -211,7 +211,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Javascript",
|
||||
"text": "[INFO] httpInterface -> Webhook -> New-Message -> Exchange-Market = binance-BTC-USDT\n[INFO] httpInterface -> Webhook -> New-Message -> messageReceived = Sell\n[INFO] httpInterface -> Webhook -> New-Message -> Messeges waiting to be Fetched by Webhooks Sensor Bot = 1\n[INFO] httpInterface -> Webhook -> New-Message -> Exchange-Market = binance-BTC-USDT\n[INFO] httpInterface -> Webhook -> New-Message -> messageReceived = Sell\n[INFO] httpInterface -> Webhook -> New-Message -> Messeges waiting to be Fetched by Webhooks Sensor Bot = 2\n[INFO] httpInterface -> Webhook -> New-Message -> Exchange-Market = binance-BTC-USDT\n[INFO] httpInterface -> Webhook -> New-Message -> messageReceived = Sell\n[INFO] httpInterface -> Webhook -> New-Message -> Messeges waiting to be Fetched by Webhooks Sensor Bot = 3\n2021-03-10T10:04:40.472Z Binance BTC/USDT Masters Webhooks Check-Webhook Main Loop # 17\n[INFO] httpInterface -> Webhook -> Fetch-Messages -> Exchange-Market = binance-BTC-USDT\n[INFO] httpInterface -> Webhook -> Fetch-Messages -> Messeges Fetched by Webhooks Sensor Bot = 3",
|
||||
"text": "[INFO] httpInterface -> Webhook -> New-Message -> Exchange-Market = binance-BTC-USDT\n[INFO] httpInterface -> Webhook -> New-Message -> messageReceived = Sell\n[INFO] httpInterface -> Webhook -> New-Message -> Messages waiting to be Fetched by Webhooks Sensor Bot = 1\n[INFO] httpInterface -> Webhook -> New-Message -> Exchange-Market = binance-BTC-USDT\n[INFO] httpInterface -> Webhook -> New-Message -> messageReceived = Sell\n[INFO] httpInterface -> Webhook -> New-Message -> Messeges waiting to be Fetched by Webhooks Sensor Bot = 2\n[INFO] httpInterface -> Webhook -> New-Message -> Exchange-Market = binance-BTC-USDT\n[INFO] httpInterface -> Webhook -> New-Message -> messageReceived = Sell\n[INFO] httpInterface -> Webhook -> New-Message -> Messeges waiting to be Fetched by Webhooks Sensor Bot = 3\n2021-03-10T10:04:40.472Z Binance BTC/USDT Masters Webhooks Check-Webhook Main Loop # 17\n[INFO] httpInterface -> Webhook -> Fetch-Messages -> Exchange-Market = binance-BTC-USDT\n[INFO] httpInterface -> Webhook -> Fetch-Messages -> Messeges Fetched by Webhooks Sensor Bot = 3",
|
||||
"updated": 1615370778562
|
||||
},
|
||||
{
|
||||
@@ -268,7 +268,7 @@
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "source: the name of the Signal Provider. This comes as part of the message sent by the provider, because is part of the URL you will specify later at the Signal Provider's system. In our example we used Trading View, but in fact it could be any other provider. You will have this property available at your Trading System, meaning that you will be able to write conditions that distingish the signal by Signal Provider.",
|
||||
"text": "source: the name of the Signal Provider. This comes as part of the message sent by the provider, because is part of the URL you will specify later at the Signal Provider's system. In our example we used Trading View, but in fact it could be any other provider. You will have this property available at your Trading System, meaning that you will be able to write conditions that distinguish the signal by Signal Provider.",
|
||||
"updated": 1615371322994
|
||||
},
|
||||
{
|
||||
@@ -337,7 +337,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "We will make ourselves sure that from within a strategy we can react to an external Signal. To test this, plese take the following steps. All of the following goes into the current Lighting Strike Backtesting Session / Task.",
|
||||
"text": "We will make ourselves sure that from within a strategy we can react to an external Signal. To test this, please take the following steps. All of the following goes into the current Lighting Strike Backtesting Session / Task.",
|
||||
"updated": 1615379790606
|
||||
},
|
||||
{
|
||||
@@ -347,7 +347,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Rigth click over the Backtesting Session node and select switch to Paper Trading so that we can simulate live trading without connecting to the exchange."
|
||||
"text": "Right click over the Backtesting Session node and select switch to Paper Trading so that we can simulate live trading without connecting to the exchange."
|
||||
},
|
||||
{
|
||||
"style": "Subtitle",
|
||||
@@ -390,7 +390,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The initialDatetime will be ingoned because we are running a Paper Trading Session. The important thing is that the finalDatetime is in the future.",
|
||||
"text": "The initialDatetime will be ignored because we are running a Paper Trading Session. The important thing is that the finalDatetime is in the future.",
|
||||
"updated": 1615380159343
|
||||
},
|
||||
{
|
||||
@@ -436,7 +436,7 @@
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Candles Volumens"
|
||||
"text": "Candles Volumes"
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
@@ -470,7 +470,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "This is not necesary the first time you run this, but if you are repeating this test, you will avoid confusions since the file of signals will be accumulating the test messages you send, and at the strategy we are not checking for the age of the messages, so it is a good idea to delete this data every time you try this procedure.",
|
||||
"text": "This is not necessary the first time you run this, but if you are repeating this test, you will avoid confusions since the file of signals will be accumulating the test messages you send, and at the strategy we are not checking for the age of the messages, so it is a good idea to delete this data every time you try this procedure.",
|
||||
"updated": 1615381726583
|
||||
},
|
||||
{
|
||||
@@ -528,15 +528,15 @@
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": "Set-up your Firewall / Rounter to accept Incoming Connections"
|
||||
"text": "Set-up your Firewall / Router to accept Incoming Connections"
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "As you might have imagined, you will need to open a port at your rounter / firewall to accept incomming connections from the signal provider's servers (like Trading View for instance). This is what allows that server to connect to the server where the Client is running, enabling the Client to receive those signals."
|
||||
"text": "As you might have imagined, you will need to open a port at your router / firewall to accept incoming connections from the signal provider's servers (like Trading View for instance). This is what allows that server to connect to the server where the Client is running, enabling the Client to receive those signals."
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "How you configure your Rounter / Firewall is up to you, and it depends on your network setup. You will need to do your research for details on how to do it, because it depends on which rounter / firewall you are using. We suggest you to include on the rules of your Firewall / Rounter the domain name or IP address of the Signal provider, so that nobody else can connect to the Client's http interface, which has, beyond Webhooks other features you don't want to expose openly to the world without restrictions.",
|
||||
"text": "How you configure your Router / Firewall is up to you, and it depends on your network setup. You will need to do your research for details on how to do it, because it depends on which router / firewall you are using. We suggest you to include on the rules of your Firewall / Router the domain name or IP address of the Signal provider, so that nobody else can connect to the Client's http interface, which has, beyond Webhooks other features you don't want to expose openly to the world without restrictions.",
|
||||
"updated": 1615368540044
|
||||
},
|
||||
{
|
||||
|
||||
+3
-3
@@ -29,7 +29,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "All launch related scripts are held in the Lauch-Scripts folder in the main Superalgos directory.",
|
||||
"text": "All launch related scripts are held in the Launch-Scripts folder in the main Superalgos directory.",
|
||||
"updated": 1620504577923
|
||||
},
|
||||
{
|
||||
@@ -84,7 +84,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "There is one unifed script to automatically create and place shortcuts to the appropriate launch script. This script is automatically run during the \"node setup\" command. It can also be run individual as follows.",
|
||||
"text": "There is one unified script to automatically create and place shortcuts to the appropriate launch script. This script is automatically run during the \"node setup\" command. It can also be run individual as follows.",
|
||||
"updated": 1621802202684
|
||||
},
|
||||
{
|
||||
@@ -217,7 +217,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "There is one unifed script to automatically uninstall shortcuts. To ese it open a command prompt or terminal. Then navigate to your Superalgos directory and type the following command:",
|
||||
"text": "There is one unified script to automatically uninstall shortcuts. To ese it open a command prompt or terminal. Then navigate to your Superalgos directory and type the following command:",
|
||||
"updated": 1621804036052
|
||||
},
|
||||
{
|
||||
|
||||
+1
-1
@@ -9,7 +9,7 @@
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The backend application runs independently from the frontend browser-based application. You may close the browser at any point without affecting your data-mining operation or the bots you may be running in your testing or prodution environments. Once you restart the browser and navigate to the correct URL, the frontend app reconnects with the backend and you regain control over the whole operation.",
|
||||
"text": "The backend application runs independently from the frontend browser-based application. You may close the browser at any point without affecting your data-mining operation or the bots you may be running in your testing or production environments. Once you restart the browser and navigate to the correct URL, the frontend app reconnects with the backend and you regain control over the whole operation.",
|
||||
"updated": 1611650588719
|
||||
},
|
||||
{
|
||||
|
||||
@@ -4,7 +4,14 @@
|
||||
"type": "Node",
|
||||
"definition": {
|
||||
"text": "Nodes are objects that exist within workspaces and can be visualized at the Design Space. Nodes can be attached to each other forming hierarchical structures. ",
|
||||
"updated": 1609235686573
|
||||
"updated": 1609235686573,
|
||||
"translations": [
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Узлы - это объекты, которые существуют в рабочих пространствах и могут быть визуализированы в the Design Space. Узлы могут быть присоединены друг к другу, образуя иерархические структуры.\n",
|
||||
"updated": 1635514669410
|
||||
}
|
||||
]
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
|
||||
+7
-1
@@ -9,7 +9,13 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Un simple moving average (SMA) calcula el promedio de un rango seleccionado de precios, generalmente precios de cierre, por el número de períodos en ese rango.",
|
||||
"updated": 1629579640550
|
||||
"updated": 1629579640550,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Простая скользящая средняя (SMA) вычисляет среднее значение выбранного диапазона цен, обычно цен закрытия, по количеству периодов в этом диапазоне.",
|
||||
"updated": 1635594765100
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+7
-1
@@ -33,7 +33,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Dieses Tutorial führt Sie in das Superalgos-Universum ein. Es führt Sie durch die wichtigsten Bereiche des Systems, lehrt Sie die grundlegende Funktionsweise, führt Sie durch den Prozess des Backtestings eines Demo Trading System und ermöglicht Ihnen sogar Ihre erste Live Trading Session.",
|
||||
"updated": 1634069835987
|
||||
"updated": 1634069835987,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Это учебное пособие представляет Вас вселенной Superalgos. Оно обучит Вас базовым операциям, проведет через основные области системы, процесс тестирования демо Trading System и даже настроит Вас на Вашу первую Live Trading Session.",
|
||||
"updated": 1635448321901
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+20
@@ -39,6 +39,11 @@
|
||||
"text": "Die Übersetzungen werden von Unterstützern aus der Community beigetragen, so dass Sie Ihre bevorzugte Sprache wählen können! Diese Community ist großartig!",
|
||||
"updated": 1634159799660,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Пользователи предоставляют переводы для выбора предпочитаемого языка. Это потрясающее Community! ",
|
||||
"updated": 1635453127908
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -77,6 +82,11 @@
|
||||
"text": "So funktioniert es: Standard ist Englisch. Wenn Sie eine andere Sprache wählen und es eine Übersetzung für die aktuelle Seite gibt, erhalten Sie diese in der gewählten Sprache. Andernfalls erhalten Sie die Seite auf Englisch!",
|
||||
"updated": 1634159943189,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Как это работает: английский - язык по умолчанию. В случае, если Вы выберете какой-нибудь другой язык, где существует перевод текущей страницы, у Вас появится возможность перевода на данном предпочитаемом языке. В обратном случае, язык остается - английский.",
|
||||
"updated": 1635448551187
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -114,6 +124,11 @@
|
||||
"text": "Um die bevorzugte Sprache zu ändern scrollen Sie die Docs auf der rechten Seite ganz nach unten und klicken Sie auf die entsprechende Flagge.",
|
||||
"updated": 1634159894831,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Используйте колесико мыши, чтобы прокрутить страницу в правильном направлении вниз. Нажмите на флажок, чтобы изменить предпочитаемый язык, если Вы желаете.",
|
||||
"updated": 1635448656834
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -151,6 +166,11 @@
|
||||
"text": "Nur die Docs und Tutorials dürfen übersetzt werden, nicht aber das Interface oder die Titel!",
|
||||
"updated": 1634070001415,
|
||||
"style": "Note"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Только документы и учебное пособие могут быть переведены, но не интерфейс, ни заголовки.",
|
||||
"updated": 1635448708836
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+33
-1
@@ -44,6 +44,15 @@
|
||||
"text": "Ich bin ein interaktives Tutorial, das erste einer Reihe, die Ihnen den Einstieg erleichtern und Ihnen alle Grundlagen vermitteln soll!",
|
||||
"updated": 1634070025309,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Я - интерактивное учебное пособие, первое в серии, предназначенное для облегчения Вашей адаптации и обучения всем основам.",
|
||||
"updated": 1635448912724},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Ben interaktif bir öğreticiyim, Superalgos'u öğrenmenize yardımcı olmak,işinizi kolaylaştırmak ve size tüm temel bilgileri öğretmek için tasarlanmış bir serinin ilk öğreticisiyim.",
|
||||
"updated": 1635575887053
|
||||
}
|
||||
],
|
||||
"updated": 1633159917192
|
||||
@@ -88,6 +97,15 @@
|
||||
"text": "Ich werde Ihnen die Werkzeuge zeigen, mit denen Sie sich bequem zurechtfinden, und Ihnen helfen, all die coolen Dinge zu entdecken, die Superalgos für Sie tun kann.",
|
||||
"updated": 1634159537847,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Я помогу Вам начать, покажу панель инструментов, с помощью которых Вы сможете комфортно передвигаться и раскрыть все интересные вещи, которые Superalgos может сделать для Вас.",
|
||||
"updated": 1635449021102},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Başlamanıza yardımcı olacağım, rahatça hareket etmenize yardımcı olacak araçları göstereceğim ve Superalgos'un sizin için yapabileceği tüm harika şeyleri keşfetmenize yardımcı olacağım.",
|
||||
"updated": 1635575910092
|
||||
}
|
||||
],
|
||||
"updated": 1633159949363
|
||||
@@ -131,6 +149,15 @@
|
||||
"text": "Tutorials sind der beste Start in Superalgos! Keine andere Ressource wird Sie schneller einarbeiten. Sie sollten alle Tutorials durcharbeiten, bevor Sie versuchen, Ihre eigenen Ideen zu implementieren!",
|
||||
"updated": 1634159523866,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Это учебное пособие является окончательным инструментом для адаптации в системе Superalgos. Начинать ознакомление с этой системой каким-либо другим образом, является ошибкой, так как никакой другой ресурс не поможет Вам ускорить процесс. Вам следовало бы ознакомиться с полным учебным пособием, прежде чем пытаться реализовать свои собственные идеи!",
|
||||
"updated": 1635449358224},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Öğreticiler, Superalgos'a alıştırma aracıdır! Superalgos'a başka bir şekilde başlamak bir hatadır, çünkü başka hiçbir kaynak sizi daha fazla hızlandıramaz. Kendi fikirlerinizi uygulamaya çalışmadan önce tüm dersleri yapmalısınız!",
|
||||
"updated": 1635576039599
|
||||
}
|
||||
],
|
||||
"updated": 1633159975051
|
||||
@@ -180,8 +207,13 @@
|
||||
"text": " Bitte klicken Sie immer auf Weiter, um fortzufahren!",
|
||||
"updated": 1634070092386,
|
||||
"style": "Success"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Пожалуйста, всегда нажимайте Next, чтобы продолжить.",
|
||||
"updated": 1635449400949
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
+30
@@ -51,6 +51,11 @@
|
||||
"text": "Wenn Sie das Frontend ausführen, verwenden Sie Chrome oder Safari auf dem Mac! Wir testen es nicht mit anderen Browsern!",
|
||||
"updated": 1634070256991,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Когда запускаете внешний интерфейс, используйте Chrome или Safari - на Mac! Мы не тестируем ни на каких-дибо других браузерах!\n",
|
||||
"updated": 1635449722541
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -100,6 +105,11 @@
|
||||
"text": "Webbrowser verhalten sich unterschiedlich. Wir wissen von Funktionen, die in anderen Browsern nicht funktionieren. Wenn Sie mit Chrome oder Safari arbeiten, klicken Sie auf Weiter und fahren Sie fort. Wenn nicht, gehen Sie wie folgt vor:",
|
||||
"updated": 1634160046151,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Хорошо известный факт, что браузеры работают по-разному, и мы знаем о функциях, которые не работают в других браузерах! Если Вы используете Chrome или Safari, нажмите Next и продолжайте. В обратном случае, выполните следующие действия:",
|
||||
"updated": 1635450080862
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -149,6 +159,11 @@
|
||||
"text": "kopieren Sie die aktuelle URL;",
|
||||
"updated": 1634070306435,
|
||||
"style": "List"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "скопируйте текущий URL-адрес;",
|
||||
"updated": 1635450108634
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -198,6 +213,11 @@
|
||||
"text": "Schließen Sie diesen Browser so wie er ist; dies schließt nicht das Lernprogramm...",
|
||||
"updated": 1634070358662,
|
||||
"style": "List"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "закройте этот браузер как есть, но не закрывайте учебное пособие;",
|
||||
"updated": 1635450191799
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -247,6 +267,11 @@
|
||||
"text": "Öffnen Sie Chrome/Safari und fügen Sie die URL ein; das Tutorial wird bei diesem Schritt geöffnet sein.",
|
||||
"updated": 1634160173540,
|
||||
"style": "List"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Откройте Chrome/Safari и вставьте URL-адрес; учебное пособие должно быть открыто на этом шаге, когда Вы вернетесь!",
|
||||
"updated": 1635450715330
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -295,6 +320,11 @@
|
||||
"text": "Wir bieten Online-Support, aber wir können Ihnen mit keinem anderen Browser helfen!",
|
||||
"updated": 1634070371187,
|
||||
"style": "Warning"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Мы предлагаем online поддержку, но мы не можем помочь Вам в работе с каким-либо другим браузером!",
|
||||
"updated": 1635450697046
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+26
-4
@@ -48,7 +48,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Tutorien werden innerhalb des Systems definiert, Sie können also mehrere von uns erstellen, wenn Sie möchten! Aber wir werden diese Fähigkeit später besprechen. Konzentrieren wir uns erst einmal auf die Grundlagen!",
|
||||
"updated": 1634070459015
|
||||
"updated": 1634070459015,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Учебное пособие устанавливается через систему, поэтому Вы можете создать больше нас, если Вы этого пожелаете. Но мы обсудим эти детали позднее. Давайте сначала сосредоточимся на базовых шагах!",
|
||||
"updated": 1635450888939
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -96,7 +102,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Superalgos ist von Natur aus ein visuelles Werkzeug. Das System stellt Informationen in hierarchischen Strukturen aus miteinander verbundenen Knoten dar, die durch Icons repräsentiert werden. Was Sie auf der rechten Seite sehen, ist eine dieser Hierarchien - insbesondere eine Tutorial-Hierarchie. In diesem Fall ist \"Tutorial\" der Typ des Knotens und \"Willkommen bei Superalgos\" ist der Name des Knotens.",
|
||||
"updated": 1634070485959
|
||||
"updated": 1634070485959,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "По сути Superalgos является визуальным инструментом. Система представляет информацию в иерархических структурах взаимосвязанных узлов, представленных иконками. То, что Вы видите справа, является одной из этих иерархий, в частности, иерархией учебного пособия - \"Tutorial\". В этом случае Tutorial - это тип узла, а глава \"Welcome to Superalgos!\" - это наименование узла.",
|
||||
"updated": 1635507910736
|
||||
}
|
||||
],
|
||||
"updated": 1616410534255
|
||||
@@ -145,9 +157,19 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Bewegen Sie Ihren Mauszeiger über den Knoten Tutorial und sehen Sie, was passiert! Wahnsinn! Cool, oder? Das sind eine Menge Knöpfe!",
|
||||
"updated": 1634070500067
|
||||
"updated": 1634070500067,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Наведите курсор мыши на узел Tutorial и посмотрите, что произойдет! Ух ты! Круто, правда? Так много кнопок!",
|
||||
"updated": 1635451952870},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Fare imlecinizi Eğitim \" Tutorial \" düğümünün üzerine getirin ve ne olduğunu görün! Vay! Güzel değil mi?Daha fazla düğme!",
|
||||
"updated": 1635577498974
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
+28
-4
@@ -48,7 +48,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Jeder Knoten verfügt über ein Menü. Mit der Schaltfläche unten links können Sie die Struktur der Knoten unterhalb des aktuellen Knotens auf- und zuklappen.",
|
||||
"updated": 1634160270495
|
||||
"updated": 1634160270495,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "В каждом узле есть меню. Кнопка в левом нижнем углу раскрывает и сворачивает структуру узлов внизу текущего узла.",
|
||||
"updated": 1635509730475
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -96,7 +102,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Klicken Sie einfach auf die Schaltfläche \"Erweitern\"!",
|
||||
"updated": 1634160281971
|
||||
"updated": 1634160281971,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Идите вперед и нажмите кнопку развернуть.",
|
||||
"updated": 1635509803681
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -143,7 +155,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Der Knoten Tutorial hat mehrere Unterknoten, und diese haben wiederum mehrere Unterknoten. Das ist der Grund, warum es eine Hierarchie ist!",
|
||||
"updated": 1634160340549
|
||||
"updated": 1634160340549,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "У узла Tutorial есть несколько потомков и у этих потомков есть намного больше потомков. Вот почему это называется иерархией.",
|
||||
"updated": 1635510024525
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -190,7 +208,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Strukturierte visuelle Darstellungen von Informationen sind das Herzstück von Superalgos, um die Komplexität hinter flexiblen und skalierbaren Handelsoperationen zu verwalten.",
|
||||
"updated": 1634160347110
|
||||
"updated": 1634160347110,
|
||||
"style": "Note"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Структурированные визуальные представления информации лежат в основе того, как Superalgos в целом выполняет торговые операции гибко и в полном масштабе.",
|
||||
"updated": 1635510247771
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+35
-5
@@ -48,7 +48,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Bevor ich Ihnen den Rest des Menüs zeige, lassen Sie uns einen Blick auf eine andere Hierarchie werfen: das Netzwerk.",
|
||||
"updated": 1634160400461
|
||||
"updated": 1634160400461,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Прежде, чем я покажу Вам остальную часть меню, давайте посмотрим на другую иерархию - Network.\n",
|
||||
"updated": 1635510334014
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -96,7 +102,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die Netzwerkhierarchie ist der Kontrollraum des Systems. Von hier aus steuern Sie Ihre Data Tasks, Testing Trading Tasks und Production Trading Tasks.",
|
||||
"updated": 1634160438707
|
||||
"updated": 1634160438707,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Сетевая иерархия - это управленческая комната системы. Именно здесь Вы управляете своими Data Tasks, Testing Trading Tasks, and Production Trading Tasks операциями.",
|
||||
"updated": 1635510485010
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -143,7 +155,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Erweitern Sie die Hierarchie und schauen Sie rein!",
|
||||
"updated": 1634160512829
|
||||
"updated": 1634160512829,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Разверните иерархию и посмотрите внутрь!",
|
||||
"updated": 1635510510872
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -191,7 +209,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Sehen Sie die Knoten, die ich bereits erwähnt habe? Cool! Wir sind hier, um Ihre allererste Data-Mining-Operation zu starten.",
|
||||
"updated": 1634160465920
|
||||
"updated": 1634160465920,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Вы видите узлы, о которых я упоминал ранее? Отлично! Мы здесь для того, чтобы начать Вашу первую операцию интеллектуального анализа данных.",
|
||||
"updated": 1635510685551
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -238,7 +262,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Doch bevor wir beginnen, habe ich eine kurze Frage an Sie: Greifen Sie per Fernzugriff auf den Client zu?",
|
||||
"updated": 1634160524428
|
||||
"updated": 1634160524428,
|
||||
"style": "Note"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Но прежде чем мы начнем, у меня к Вам есть небольшой вопрос: получаете ли Вы доступ к Client удаленно?",
|
||||
"updated": 1635511033016
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+30
-2
@@ -44,6 +44,15 @@
|
||||
"text": "Superalgos ermöglicht es, den Client auf einem Rechner auszuführen und über den Browser von einem anderen Rechner im Netzwerk darauf zuzugreifen.",
|
||||
"updated": 1634160581763,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Superalgos позволяет запустить Client на машине и получать к нему доступ через браузер с другого компьютера в сети.",
|
||||
"updated": 1635581826996},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Superalgos, İstemciyi bir makinede çalıştırmaya ve ağdaki başka bir makineden tarayıcı aracılığıyla ona erişmeye izin verir.",
|
||||
"updated": 1635577594164
|
||||
}
|
||||
],
|
||||
"updated": 1616410688496
|
||||
@@ -86,7 +95,17 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Viele Nutzer entscheiden sich dafür, den Client in der Cloud, auf Einplatinencomputern wie dem Raspberry Pi oder auf einem eigenen PC auszuführen, den sie beim Live-Handel immer eingeschaltet lassen können. Der My Computer Network Node stellt den Rechner dar, auf dem der Client ausgeführt wird.",
|
||||
"updated": 1634168869002
|
||||
"updated": 1634168869002,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Многие пользователи предпочитают запускать Client в облаке, на одноплатном устройстве как, например, Raspberry Pi или РС, который они могут оставить включенным в любое время, когда идет торговля в режиме реального времени. My Computer Network Node представляет машину, на которой работает Client.",
|
||||
"updated": 1635581854422},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Birçok kullanıcı İstemciyi ( Client ) bulutta, Raspberry Pi gibi makinelerde veya canlı işlem yaparken her zaman açık bırakabilecekleri özel bir bilgisayarda çalıştırmayı tercih eder. Bilgisayarım Ağ Düğümü ( Node ), İstemcinin ( Client ) üzerinde çalıştığı makineyi temsil eder.",
|
||||
"updated": 1635578604315
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -124,8 +143,17 @@
|
||||
"text": "Superalgos hat derzeit keine Form der Sicherheit implementiert. Sie sollten das System nur im Rahmen eines beschränkten LANs verwenden. Wenn Sie sich dafür entscheiden, den Client in der Cloud laufen zu lassen, müssen Sie Ihre eigene Sicherheit implementieren.",
|
||||
"updated": 1634160832892,
|
||||
"style": "Warning"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "На данном этапе Superalgos не гарантирует никакой формы безопасности. Вам следует использовать систему только в контексте местной сети с ограниченным доступом. Если Вы выбрали запустить Client в облаке, Вам необходимо осуществить свою собственную систему безопасности.",
|
||||
"updated": 1635581868732},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Bu aşamada Superalgos herhangi bir güvenlik şekli uygulamamaktadır. Sistemi yalnızca kısıtlı bir Yerel Alan Ağı bağlamında kullanmalısınız. İstemciyi bulutta çalıştırmayı seçtiyseniz, kendi güvenliğinizi uygulamanız gerekir.",
|
||||
"updated": 1635578525124
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
+35
-5
@@ -31,7 +31,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Das Superalgos-Repository hat drei Hauptzweige: master, develop und den, nach dem wir suchen, plugins-docs.",
|
||||
"updated": 1634821013096
|
||||
"updated": 1634821013096,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Особенностью репозитория Superalgos является подразделение его на три основных разновидности: мастер, разработка и одно поисковое подразделение - плагины-документы.\n",
|
||||
"updated": 1635515254111
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -62,7 +68,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Es gibt vielleicht noch mehr, aber das sind die wichtigsten!",
|
||||
"updated": 1634821022072
|
||||
"updated": 1634821022072,
|
||||
"style": "Success"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Их может быть и больше, но эти самые основные!",
|
||||
"updated": 1635581904616
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -91,7 +103,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Master Branch: Enthält die stabile Version der Software. Reichen Sie niemals Beiträge für diesen Zweig ein!",
|
||||
"updated": 1634821032083
|
||||
"updated": 1634821032083,
|
||||
"style": "List"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Master Branch: Features имеет устойчивую версию программного обеспечения. Никогда не размещайте материалы в этом подразделении.",
|
||||
"updated": 1635516502634
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -121,7 +139,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Develop Branch: Enthält die Version, die sich derzeit in der Entwicklung befindet. Reichen Sie Beiträge ein, die die Codebasis betreffen.",
|
||||
"updated": 1634821041566
|
||||
"updated": 1634821041566,
|
||||
"style": "List"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Develop Branch: Features имеет версию, которая на данный момент находится в разработке. Размещайте материалы кода, влияющие на кодовую базу.",
|
||||
"updated": 1635515640752
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -150,7 +174,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Plugins-Docs Branch: Enthält die Version im Master-Zweig plus die letzten Änderungen in den Docs und Plugins. Reichen Sie Beiträge zu Übersetzungen, Verbesserungen in den Docs, Tutorials und Plugins wie Data Mines, Trading Systems usw. ein!",
|
||||
"updated": 1634821050724
|
||||
"updated": 1634821050724,
|
||||
"style": "List"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Plugins-Docs Branch: Features содержит версию в главном подразделении, а также последние изменения в документах и Plugins. Размещайте материалы переводов, улучшенные версии в документах, учебных пособиях и плагинах, как например: база данных, торговые системы и так далее.",
|
||||
"updated": 1635516389444
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+53
-7
@@ -42,7 +42,17 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Wenn Sie von demselben Rechner aus auf den Client zugreifen, können Sie auf Weiter klicken und diesen Schritt überspringen!",
|
||||
"updated": 1634161773115
|
||||
"updated": 1634161773115,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Если Вы получаете доступ к Client с того же самого устройства, то можете кликнуть на кнопку Next и пропустить этот шаг на этом этапе.",
|
||||
"updated": 1635581922558},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "İstemciye ( Client ) aynı makineden erişiyorsanız, İleri'ye tıklayıp bu adımı şimdi atlayabilirsiniz!",
|
||||
"updated": 1635579026048
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -84,7 +94,17 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Wenn Sie von einem entfernten Rechner aus auf den Client zugreifen, müssen Sie die Netzwerkknoten-konfiguration anpassen, bevor Sie fortfahren.",
|
||||
"updated": 1634161862309
|
||||
"updated": 1634161862309,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Если Вы работаете на машине удаленно, то необходимо отрегулировать конфигурацию the Network Node перед тем, как Вы продолжите.",
|
||||
"updated": 1635517885096},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "İstemciye ( Client ) uzak bir makineden erişiyorsanız, devam etmeden önce Ağ Düğümü ( Node ) yapılandırmasını ayarlamanız gerekir.",
|
||||
"updated": 1635579070105
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -132,13 +152,23 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Klicken Sie auf Konfigurieren in der oberen rechten Ecke des Netzwerkknoten-Menüs.",
|
||||
"updated": 1634161879485
|
||||
"updated": 1634161879485,
|
||||
"style": "List"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Нажмите Configure в правом верхнем углу в меню the Network Node;",
|
||||
"updated": 1635517953808},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Ağ Düğümü menüsünün sağ üst köşesindeki Yapılandır'a ( Configure ) tıklayın.",
|
||||
"updated": 1635579264884
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Change the host parameter for the IP address of the machine running the backend. If you use a reverse proxy you must manually add \"webSocketsExternalURL\": \"wss:\/\/mydomain.com:443\" config parameter.",
|
||||
"text": "Change the host parameter for the IP address of the machine running the backend. If you use a reverse proxy you must manually add \"webSocketsExternalURL\": \"wss://mydomain.com:443\" config parameter.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "ID",
|
||||
@@ -160,7 +190,7 @@
|
||||
},
|
||||
{
|
||||
"language": "FR",
|
||||
"text": "Changez le paramètre host pour l'adresse IP de la machine qui exécute le backend. Si vous utilisez un reverse proxy ajoutez manuellement \"webSocketsExternalURL\": \"wss:\/\/mydomain.com:443\" dans les paramètres de configuration ",
|
||||
"text": "Changez le paramètre host pour l'adresse IP de la machine qui exécute le backend. Si vous utilisez un reverse proxy ajoutez manuellement \"webSocketsExternalURL\": \"wss://mydomain.com:443\" dans les paramètres de configuration ",
|
||||
"updated": 1623958474738,
|
||||
"style": "List"
|
||||
},
|
||||
@@ -173,7 +203,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Ändern Sie den Host-Parameter für die IP-Adresse des Rechners, auf dem das Backend läuft.",
|
||||
"updated": 1634161891685
|
||||
"updated": 1634161891685,
|
||||
"style": "List"
|
||||
},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Arka ucu çalıştıran makinenin IP adresi için ana bilgisayar parametresini değiştirin. Ters proxy kullanıyorsanız, \"webSocketsExternalURL\": \"wss://mydomain.com:443\" yapılandırma parametresini manuel olarak eklemelisiniz.",
|
||||
"updated": 1635579170033
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -220,7 +256,17 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Beenden Sie die Konfiguration, indem Sie den Mauszeiger aus der Konfigurationsblase bewegen! Wenn die Konfiguration korrekt ist, sollte die Fehlermeldung im Netzwerkknoten in einer Minute verschwinden!",
|
||||
"updated": 1634161900103
|
||||
"updated": 1634161900103,
|
||||
"style": "List"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Выйдите из конфигурации, убрав указатель мыши из пузырька конфигурации! Если конфигурация происходит верно, то сообщение об ошибке в Network Node должно исчезнуть через минуту!",
|
||||
"updated": 1635581935285},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Fare işaretçisini yapılandırma balonundan kaldırarak yapılandırmadan çıkın! Yapılandırma doğruysa, Ağ Düğümü'ndeki hata mesajı bir dakika içinde kaybolmalıdır!",
|
||||
"updated": 1635579204588
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+34
-4
@@ -49,7 +49,17 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Minimale Rechner wie der Raspberry Pi können mit dem Superalgos-Client umgehen, um Daten- oder Handelsaufgaben auszuführen. Einige Prozesse sind jedoch möglicherweise zu groß für effektives arbeiten!",
|
||||
"updated": 1634161449946
|
||||
"updated": 1634161449946,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "В то время как минималистическое аппаратное устройство, такое как Raspberry Pi, может обрабатывать Superalgos Client для выполнения как данных, так и торговых задач, некоторые из них могут быть слишком малы для активной работы.",
|
||||
"updated": 1635581958903},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Raspberry Pi gibi minimalist donanım, Superalgos İstemcisini ( Client ) hem veri hem de ticaret görevlerini yürütmek için idare edebilirken, bazıları aktif çalışma için çok küçük olabilir!",
|
||||
"updated": 1635578710092
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -92,7 +102,17 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Der Kerngedanke hinter dem Betrieb des Clients auf kleiner physischer oder virtueller Hardware ist die Maximierung der Kosteneffizienz. In solchen Kontexten wird die Benutzeroberfläche auf ein Minimum reduziert.",
|
||||
"updated": 1634161727057
|
||||
"updated": 1634161727057,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Основная идея, лежащая в основе запуска Клиента на небольшом физическом или виртуальном устройстве, заключается в максимилизации эффективности затрат при развертывании в производствнных условиях. В таких контекстах UI используется по минимуму.",
|
||||
"updated": 1635581983754},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "İstemciyi ( Client ) küçük fiziksel veya sanal donanımda çalıştırmanın arkasındaki temel fikir, üretim dağıtımlarında maliyet verimliliğini en üst düzeye çıkarmaktır. Bu tür bağlamlarda, kullanıcı arayüzü ( UI ) minimumda kullanılır.",
|
||||
"updated": 1635578789059
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -140,9 +160,19 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Wir empfehlen zu erlernen von Superalgos einen ausreichend großen Computer. Wenn Sie feststellen, dass dieses Tutorials zu langsam ist, sollten Sie die Installation auf normaler Hardware in Erwägung ziehen, bis Sie das System erlernt haben, Ihre ersten Strategien erstellt haben und bereit sind, es einzusetzen. Andernfalls kann es frustrierend sein.",
|
||||
"updated": 1634161690929
|
||||
"updated": 1634161690929,
|
||||
"style": "Success"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Мы настоятельно рекомендуем изучать Superalgos на полномасштабном устройстве во время работы. Если Вы заметили, что Ваше оборудование работает слишком медленно во время этого ознакомления с системой, рассмотрите возможность установки ее на обычное оборудование, пока Вы не изучите систему, не разработаете свои первые стратегии и не будете готовы к развитию. В обратном случае, Вы можете разочароваться.",
|
||||
"updated": 1635581399970},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Superalgos'u donanımı iyi bir makinede öğrenmenizi şiddetle tavsiye ederiz. Bu eğitim sırasında düşük donanımınızın çok yavaş olduğunu fark ederseniz, sistemi öğrenene, ilk stratejilerinizi oluşturana ve dağıtıma hazır olana kadar normal donanıma yüklemeyi düşünün. Aksi takdirde, sinir bozucu olabilir.",
|
||||
"updated": 1635578874162
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
+70
-7
@@ -36,7 +36,18 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Der Knoten Data Tasks steuert alle für diesen Netzwerkknoten definierten Data-Mining-Aufgaben.",
|
||||
"updated": 1634162078401
|
||||
"updated": 1634162078401,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Узел Data Tasks управляет всеми задачами интеллектуального анализа данных, определенными для Network Node.",
|
||||
"updated": 1635611514856,
|
||||
"style": "Definition"},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Veri Görevleri düğümü ( Data Tasks ), bu Ağ Düğümü ( Node ) için tanımlanan tüm veri madenciliği görevlerini kontrol eder.",
|
||||
"updated": 1635579379923
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -72,7 +83,18 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Sie sind dabei, die erste der folgenden Aktivitäten zu starten, die wir in den nächsten Minuten behandeln werden:",
|
||||
"updated": 1634162092086
|
||||
"updated": 1634162092086,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Теперь Вы готовы приступить к первому из следующих действий, которые мы рассмотрим через несколько минут:",
|
||||
"updated": 1635582572477,
|
||||
"style": "Text"},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Önümüzdeki birkaç dakika içinde ele alacağımız aşağıdaki etkinliklerden ilkine başlamak üzeresiniz:",
|
||||
"updated": 1635579409291
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -107,7 +129,18 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Starten Sie eine Data-Mining-Operation, um Daten für den BTC/USDT Market von Binance zu erhalten.",
|
||||
"updated": 1634162101738
|
||||
"updated": 1634162101738,
|
||||
"style": "List"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Run a data mining, чтобы получить данны BTC/USDT Market от Binance.",
|
||||
"updated": 1635583091531,
|
||||
"style": "List"},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Binance'den BTC/USDT Piyasası ( Market ) için veri almak üzere bir veri madenciliği operasyonu çalıştıracağız.",
|
||||
"updated": 1635579469652
|
||||
}
|
||||
],
|
||||
"updated": 1616414602356
|
||||
@@ -143,7 +176,17 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Führen Sie eine Backtesting Session mit einer bestehenden Open-Source-Strategie durch.",
|
||||
"updated": 1634162110500
|
||||
"updated": 1634162110500,
|
||||
"style": "List"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Run a Backtesting Session с использованием существующей стратегии с открытым исходным кодом.",
|
||||
"updated": 1635583981313},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Mevcut bir açık kaynak stratejisiyle bir Geri Test Oturumu ( Backtesting Session ) çalıştıracağız.",
|
||||
"updated": 1635579517849
|
||||
}
|
||||
],
|
||||
"updated": 1616414607531
|
||||
@@ -179,7 +222,17 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Führen Sie eine Live Trading Session mit minimalen Mitteln durch, um die kritischen Aspekte des Systems zu testen.",
|
||||
"updated": 1634162119027
|
||||
"updated": 1634162119027,
|
||||
"style": "List"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Run a Live Trading Session с минимальными средствами, чтобы проверить критические аспекты системы.",
|
||||
"updated": 1635584028882},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Sistemin kritik yönlerini test etmek için minimum fonla Canlı Ticaret Oturumu ( Live Trading Session ) çalıştıracağız.",
|
||||
"updated": 1635579557420
|
||||
}
|
||||
],
|
||||
"updated": 1616414612909
|
||||
@@ -215,9 +268,19 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Sind Sie damit einverstanden? Sollen wir anfangen?",
|
||||
"updated": 1634162125495
|
||||
"updated": 1634162125495,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Вас это устраивает? Мы можем начать?",
|
||||
"updated": 1635584052704},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Hazır mısın, başlayalım mı?",
|
||||
"updated": 1635579651757
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
+56
-6
@@ -36,7 +36,17 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Bevor wir mit dem Data Mining beginnen, habe ich eine kleine Frage an Sie: Handeln Sie bei binance.com, binance.us oder keinem von beiden?",
|
||||
"updated": 1634162511903
|
||||
"updated": 1634162511903,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Прежде, чем мы начнем data mining, у меня к Вам есть небольшой вопрос: торгуете ли Вы на binance.com или binance.us, или ни на одном из них?\n",
|
||||
"updated": 1635584552207},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Veri madenciliğine başlamadan önce size küçük bir sorum var: binance.com'da mı, binance.us'ta mı işlem yapıyorsunuz yoksa hiçbirinde mi?",
|
||||
"updated": 1635582493156
|
||||
}
|
||||
],
|
||||
"updated": 1622189667210
|
||||
@@ -73,7 +83,17 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Wenn Sie bei binance.com oder gar nicht mit Binance handeln, dann können Sie diesen und den nächsten Schritt überspringen!",
|
||||
"updated": 1634162370036
|
||||
"updated": 1634162370036,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": " Если Вы торгуете на binance.com или вообще не торгуете на Binance, то пропустите этот шаг и перейдите к следующему.",
|
||||
"updated": 1635584632228},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Binance.com'da işlem yapıyorsanız veya Binance ile hiç işlem yapmıyorsanız, bu ve sonraki adımı atlayabilirsiniz!",
|
||||
"updated": 1635582549143
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -109,7 +129,17 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Wenn Sie bei binance.us handeln, konfigurieren Sie den Binance-Knoten auf der rechten Seite! Das Video im nächsten Schritt zeigt Ihnen wie!",
|
||||
"updated": 1634162445222
|
||||
"updated": 1634162445222,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Если Вы торгуете на binance.us, то необходимо настроить узел Binance справа! Видео на следующем шаге покажет Вам как это сделать!",
|
||||
"updated": 1635584907910},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Binance.us'ta işlem yapıyorsanız, Binance düğümünü (sağda) yapılandırmanız gerekir! Bir sonraki adımdaki video size nasıl olduğunu gösteriyor!",
|
||||
"updated": 1635582592953
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -145,7 +175,17 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Rufen Sie die Konfiguration auf und ändern Sie den codeName in \"binanceus\". Bewegen Sie den Mauszeiger aus der Konfigurationsblase und sie wird automatisch geschlossen und gespeichert.",
|
||||
"updated": 1634162409313
|
||||
"updated": 1634162409313,
|
||||
"style": "List"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Перейдите в настройки и измените codeName на \"binanceus\". Переместите указатель мыши из пузырька конфигурации и он закроется и сохранится автоматически.",
|
||||
"updated": 1635585138540},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Yapılandırmaya (Configure) erişin ve kod adını \"binanceus\" olarak değiştirin. Fare işaretçisini yapılandırma balonunun dışına çıkarın, otomatik olarak kapanacak ve kaydedilecektir.",
|
||||
"updated": 1635582755655
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -181,9 +221,19 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Ändern Sie die Bezeichnung des Knotens in \"Binanceus\".",
|
||||
"updated": 1634162417265
|
||||
"updated": 1634162417265,
|
||||
"style": "List"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Отредактируйте метку узла, чтобы прочитать \"Binanceus\".",
|
||||
"updated": 1635585248449},
|
||||
{
|
||||
"language": "TR",
|
||||
"text": "Şimdi düğüm etiketini \"Binanceus\" olarak görüyor olmalısın.",
|
||||
"updated": 1635582726102
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
+7
-1
@@ -26,7 +26,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "In diesem Schritt wird ein Video im Vollbildmodus abgespielt.",
|
||||
"updated": 1634162552296
|
||||
"updated": 1634162552296,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Этот шаг воспроизводит видео в полноэкранном режиме.",
|
||||
"updated": 1635585594036
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+28
-4
@@ -37,7 +37,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Open het \"Data Tasks\" knooppunt menu en zoek de \"Run all project data tasks\" knop in de rechter bovenhoek...",
|
||||
"updated": 1634455832255
|
||||
"updated": 1634455832255,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Получите доступ в мню узла Data Tasks и найдите кнопку \"Run all project data tasks\" в правом верхнем углу...",
|
||||
"updated": 1635591220354
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -74,7 +80,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Klik op de knop \"Run all project data tasks\"! Bevestig het starten door een tweede keer op de knop te klikken.",
|
||||
"updated": 1634455913719
|
||||
"updated": 1634455913719,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Нажмите кнопку \"Run all project data tasks\"! Подтвердите запрос, нажав кнопку во второй раз.",
|
||||
"updated": 1635591295731
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -109,7 +121,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Na ongeveer 30 seconden hoor je een statusbericht te zien onder de Data Tasks knooppunt, dat aangeeft dat 1 van de 1 \"Exchange Data Tasks\" knooppunten draait.",
|
||||
"updated": 1634456056619
|
||||
"updated": 1634456056619,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Примерно через 30 секунд Вы должны увидеть уведомление о состоянии под узлом Data Tasks nоказывающее, что 1 из 1 узла Exchange Data Tasks - запущен.",
|
||||
"updated": 1635591483326
|
||||
}
|
||||
],
|
||||
"updated": 1622190035816
|
||||
@@ -145,7 +163,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "De console van de app zou er ongeveer zo uit moeten zien als de video in de volgende stap.",
|
||||
"updated": 1634456127607
|
||||
"updated": 1634456127607,
|
||||
"style": "Note"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Ваше консольное приложение должно показать что-то похожее на то, как показано на видео в следующем шаге.",
|
||||
"updated": 1635591567030
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+7
-1
@@ -20,7 +20,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "In diesem Schritt wird ein Video im Vollbildmodus abgespielt.",
|
||||
"updated": 1634162777632
|
||||
"updated": 1634162777632,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Этот шаг восроизводит видео в полноэкранном режиме.",
|
||||
"updated": 1635592760036
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+28
-4
@@ -36,7 +36,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Ik heb je net diep in de \"Data Mining\" operatie gesleept. Bekijk de voortgang van de Sensor Bot Instance aan je rechterkant!",
|
||||
"updated": 1634456610972
|
||||
"updated": 1634456610972,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Я только что вовлек Вас глубоко в рамки операции по Сбору данных. Посмотрите, как продвигается экземпляр Sensor Bot справа от вас!",
|
||||
"updated": 1635592906231
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -72,7 +78,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "De sensor bot haalt momenteel gegevens op van de exchange. Zodra ze klaar is met de extractie van de ingegeven datums, zal er iets heel cools gebeuren... automatisch!",
|
||||
"updated": 1634456716853
|
||||
"updated": 1634456716853,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Сенсорный бот в настоящий момент извлекает данные из обмена. Как только бот завершит извлечение необходимых данных для определенного диапазона дат и времени, пороизойдет что-то действительно классное... автоматически!",
|
||||
"updated": 1635593777398
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -107,7 +119,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Heb je een idee wat het zou kunnen zijn?",
|
||||
"updated": 1634456739799
|
||||
"updated": 1634456739799,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Вы можете догадаться, что это может быть?",
|
||||
"updated": 1635593428455
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -143,7 +161,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Het zou niet langer dan 3 tot 5 minuten moeten duren om de gegevens van Binance op te halen, het kan langer duren, afhankelijk van je hardware. Kan je niet wachten? Prima! Klik op Volgende voor een hint!",
|
||||
"updated": 1634456830102
|
||||
"updated": 1634456830102,
|
||||
"style": "Success"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Извлечение данных из Binance должно занять не более 3-5 минут, или немного больше, в зависимости от Вашего устройства. Не можете дождаться? Отлично! Нажмите Next для быстрой подсазки!",
|
||||
"updated": 1635593584865
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+28
-4
@@ -36,7 +36,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Dat klopt! Indicators gaan werken zodra de sensor bot klaar is met haar werk!",
|
||||
"updated": 1634456917084
|
||||
"updated": 1634456917084,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Верно! Индикаторы начнуть работать, как только сенсорный бот закончит свою работу! ",
|
||||
"updated": 1635593922335
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -72,7 +78,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Je bekijkt het proces van de Candles Volumes. Ze veranderd de één-minuut candles die de sensor bot download van de exchange in candles voor alle tijdkaders.",
|
||||
"updated": 1634457056780
|
||||
"updated": 1634457056780,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Вы наблюдаете процесс увеличения объема свечей. Он превращает одноминутные свечи, которые сенсорный бот загружает с биржи, в свечи для всех временных рамок.",
|
||||
"updated": 1635594020777
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -108,7 +120,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Wat gebeurt er als ze klaar is?",
|
||||
"updated": 1634457082071
|
||||
"updated": 1634457082071,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Что произойдет после того, как он закончит?",
|
||||
"updated": 1635594060919
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -143,7 +161,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "De Candles Volumes bot moet klaar zijn, zodat andere bots hun werk kunnen gaan doen. Stel je voor dat een bot een 20-periodes Simple Moving Average moet berekenen voor alle tijdskaders. Zij heeft dan het Data Product van Candles Volumes nodig als input voor de SMA berekening. Een dergelijke behoefte noemen we een Data Dependency.",
|
||||
"updated": 1634457249372
|
||||
"updated": 1634457249372,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Другим ботам необходимы большие объемы свечей для полного окончания их работы для того, чтобы они могли приступить к своей. Представьте, что боту нужно рассчитать Simple Moving Average за 20 периодов для все временных рамок. Ему необходим Data Product, полученный по объемам свечей в качестве входных данных для рассчета SMA. Мы назывем такую потребность Data Dependency.",
|
||||
"updated": 1635594443248
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+28
-4
@@ -36,7 +36,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Ik wil je iets laten zien terwijl de datamining operatie bezig is. Ik zal je leren hoe je moet lopen... in twee seconden!",
|
||||
"updated": 1634926689787
|
||||
"updated": 1634926689787,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Я хочу показать Вам кое-что, пока операция data mining в процессе. Я научу Вас передвигаться... за 2 секунды!",
|
||||
"updated": 1635596573723
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -72,7 +78,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Gewoon klikken en slepen met je muis!",
|
||||
"updated": 1634926782434
|
||||
"updated": 1634926782434,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Просто нажмите на мышку и потащите!",
|
||||
"updated": 1635607627239
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -108,7 +120,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Gemakkelijk toch? Echter de ontwerpruimte is enorm en ik zou niet willen dat je muisarm krijgt als je zo rondsleept.",
|
||||
"updated": 1634927028615
|
||||
"updated": 1634927028615,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Легко, правда? Отлично! Однако дизайнерское пространство - это огромное место и я бы не хотел, чтобы у Вас возникли определенные тендиниты, передвигаясь таким образом.",
|
||||
"updated": 1635608367917
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -143,7 +161,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Ik zal je nog een paar trucjes leren in de volgende stappen.",
|
||||
"updated": 1634927063636
|
||||
"updated": 1634927063636,
|
||||
"style": "Success"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Я научу Вас ещё паре трюкам в следующих нескольких шагах.",
|
||||
"updated": 1635608431495
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+28
-4
@@ -36,7 +36,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Jazeker! je mag je keyboard ook gebruiken! Je gaat dit geweldig vinden voor lange reizen op de ontwerpruimte!",
|
||||
"updated": 1634927272967
|
||||
"updated": 1634927272967,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Да! Вы можете использовать клавиатуру тоже! Вам понравится это в путешествиях на большие расстояния в дизайнерсоки пространстве.",
|
||||
"updated": 1635608556366
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -73,7 +79,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Gewone mensen gebruiken de Ctrl toets plus de pijltjestoetsen: ← → ↑ ↓",
|
||||
"updated": 1634927382600
|
||||
"updated": 1634927382600,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Обычные пользователи могут использовать клавишу Ctrl плюс клавиши со стрелками: ← → ↑ ↓",
|
||||
"updated": 1635608613854
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -109,7 +121,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Valt het je op dat als je de toetsen ingedrukt houdt, je pas echt gaat vliegen?",
|
||||
"updated": 1634927471853
|
||||
"updated": 1634927471853,
|
||||
"style": "Note"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Обратите внимание, что удержание нажатых клавиш заставляет Вас летать!",
|
||||
"updated": 1635608711456
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -145,7 +163,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Uiteraard moeten Mac fans de Ctrl toets vervangen voor Cmd",
|
||||
"updated": 1634927537845
|
||||
"updated": 1634927537845,
|
||||
"style": "Success"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Конечно, Mac-фанаты должны заменить Ctrl на Cmd.",
|
||||
"updated": 1635608795704
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+28
-4
@@ -36,7 +36,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Ok, je gaat niet echt teleporteren, ook geen ruimtetijd buigen, maar het voelt bijna zo! Het is tijd om te leren hoe je de ontwerpruimte kaart moet gebruiken.",
|
||||
"updated": 1634927678819
|
||||
"updated": 1634927678819,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "На самом деле Вы не собираетесь телепортироваться и не будете искривлять временное пространство, но это почти похоже на это! Пришло время научиться использовать карту пространство дизайна.",
|
||||
"updated": 1635608952753
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -72,7 +78,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Ik zei al eerder dat de Design Space enorm is, en dat meende ik! Om van de ene hoek naar de andere te gaan moet je honderden keren klikken en slepen. Hoewel je met de toetsen halsbrekende snelheden kunt bereiken, is het niet zo cool als teleporteren! Dit is hoe het werkt:",
|
||||
"updated": 1634928137088
|
||||
"updated": 1634928137088,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Я упоминал ранее, что Design Space - огромно, и я не шутил! Переход из одного угла в противоположный занял бы сотни щелчков и передвижений. Хотя использование клавиатуры позволяет развивать головокружительные скорости, но это не так круто, как телепортация! Вот как это работает:",
|
||||
"updated": 1635609086655
|
||||
}
|
||||
],
|
||||
"updated": 1616414991030
|
||||
@@ -109,7 +121,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Rechter muisklik opent de kaart en met een linkermuisklik ga je naar die specifieke plek op de kaart!",
|
||||
"updated": 1634927959267
|
||||
"updated": 1634927959267,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Щелкните правой кнопкой мыши, чтобы открыть карту, а затем щелкните левой кнопкой мыши в любой точке, чтобы перейти в это определенное место!",
|
||||
"updated": 1635609696214
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -144,7 +162,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Zie je me in de linker onderhoek van de ontwerpruimte? Nu weet je me waar je kunt vinden!",
|
||||
"updated": 1634928024309
|
||||
"updated": 1634928024309,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Видите меня в левом нижнем углу пространства дизайна? Тепер Вы знаете, где меня найти!",
|
||||
"updated": 1635609809487
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+28
-4
@@ -36,7 +36,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Er is nog een hulpmiddel dat je wellicht nuttig vindt om de ruimtetijd te manipuleren! De zoom functie van de browser!",
|
||||
"updated": 1635180926329
|
||||
"updated": 1635180926329,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Есть еще один инструмент, который может оказаться полезным для управлением временным простарнством! Встроенная функция масштабирования браузера!",
|
||||
"updated": 1635609923705
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -73,7 +79,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Soms wil je grotere delen van de Design Space te visualiseren dan het scherm toelaat.",
|
||||
"updated": 1635181009086
|
||||
"updated": 1635181009086,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": " Может, у Вас возникнет желание визуализировать большие участки Design Space , чем позволяет Ваш экран.",
|
||||
"updated": 1635610025598
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -109,7 +121,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Druk Ctrl in en scroll met je muiswiel op Windows of ⌘ en - of + op Mac.",
|
||||
"updated": 1635181100849
|
||||
"updated": 1635181100849,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Нажмите Ctrl и прокрутите колесико мыши в Windows или нажмите ⌘ и \"+\" или \"-\" на Mac.",
|
||||
"updated": 1635610153211
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -149,7 +167,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Chrome geeft het zoomniveau aan in de rechterbovenhoek. Wanneer je in- of uitzoomt, wordt de ontwerpruimte gecentreerd op het scherm. Gebruik de kaart van de ontwerpruimte om terug te gaan naar waar je was gebleven.",
|
||||
"updated": 1635181242967
|
||||
"updated": 1635181242967,
|
||||
"style": "Success"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Chrome указывает уровень масштабирования в правом верхнем углу. Когда Вы увеличиваете или уменьшаете масштаб, пространство дизайна центрируется на экране. Используйте карту пространства дизайна, чтобы вернуться туда, где Вы были.",
|
||||
"updated": 1635610570380
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+28
-4
@@ -36,7 +36,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Voordat we weer aan het werk gaan, wil ik je een paar dingen vertellen over hoe wij—tutorials—werken.",
|
||||
"updated": 1635181366053
|
||||
"updated": 1635181366053,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Прежде чем мы вернемся к делу, позвольте предоставить еще некоторую информацию о том, как работает это учебное пособие.",
|
||||
"updated": 1635610768332
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -73,7 +79,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "In het kort: Jij bent de baas!",
|
||||
"updated": 1635181400130
|
||||
"updated": 1635181400130,
|
||||
"style": "Success"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Вкратце, Вы - главный!",
|
||||
"updated": 1635610786071
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -103,7 +115,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Je kunt een tutorial onderbreken en stappen, of hele onderwerpen, op elk gewenst moment overslaan. Als je er klaar voor bent om de les weer op te pakken, vind je ons in het onderste deel van de ontwerpruimte. Klik op Resume in het menu om verder te gaan waar je was gebleven, of bij de eerste stap die je hebt overgeslagen. Klik op Play om vanaf het begin te beginnen!",
|
||||
"updated": 1635181613391
|
||||
"updated": 1635181613391,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Вы можете остановиться в изучении учебного пособия и пропустить шаги или полные темы в любой момент. Как только Вы будете готовы снова приступить к изучению материала, найдите меня, Tutorial, в нижней части пространства дизайна. Выберите Resume в меню, чтобы начать с того места, где Вы остановились, или с первого шага, который Вы пропустили. Выберите Play, чтобы начать с самого начала!",
|
||||
"updated": 1635611174272
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -138,7 +156,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Laten we dat eens proberen! Klik op onderstaande Stop knop, zodra ik weg ben, open mijn menu en klik op Resume.",
|
||||
"updated": 1635181685751
|
||||
"updated": 1635181685751,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Давайте попробуем! Нажмите кнопку Stop ниже, и как только я исчезну, откройте меню и выберите Resume.",
|
||||
"updated": 1635611369099
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+28
-4
@@ -36,7 +36,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Op dit punt, overspoel ik waarschijnlijk je hippocampus! Maak je geen zorgen... je kan teruggaan naar elke vorige stap!",
|
||||
"updated": 1635181798322
|
||||
"updated": 1635181798322,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "В этот момент я, вероятно, перезагружаю Ваш мозг. Но не волнуйтесь... Вы можете вернуться к любому предыдущему шагу.",
|
||||
"updated": 1635611688610
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -72,7 +78,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Heb je een reminder nodig over deze onderwerpen?",
|
||||
"updated": 1635181965170
|
||||
"updated": 1635181965170,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Если Вам когда-нибудь понадобится напоминание по любой из этих тем...",
|
||||
"updated": 1635611733808
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -107,7 +119,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "Vind een Tutorial Topic en speel het af! Je kan mij in de linkerbenedenhoek van de ontwerpruimte, vouw mij uit en loop door de hiërarchie van onderwerpen en stappen, kies je onderwerp en klik op Play. Onderwerpen zijn gerangschikt met de klok mee, startend rechts van de hoofdknoop van de Tutorial.",
|
||||
"updated": 1635182170565
|
||||
"updated": 1635182170565,
|
||||
"style": "List"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Найдите Tutorial Topic и повторите ее! Вы можете найти меня в левом нижнем углу пространства дизайна, развернуть, просмотреть иерархию тем и шагов и нажать Play на любом шаге или теме. Темы расположены по часовой стрелке, начиная с правой стороны главного узла Tutorial.",
|
||||
"updated": 1635612033411
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -143,7 +161,13 @@
|
||||
{
|
||||
"language": "NL",
|
||||
"text": "\"Need a Quick Reminder?\" Vind deze stap onder het \"Tutorials & Help\" onderwerp. Klik dan op Stop en herstart door op Play te klikken van de Tutorial Step!",
|
||||
"updated": 1635182294956
|
||||
"updated": 1635182294956,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "\"Нужно быстрое напоминание?\" Найдите этот шаг в разделе \"Tutorials & Help\" - ниже. Затем нажмите Stop и перезапустите, нажав Play на указанном Tutorial Step!",
|
||||
"updated": 1635612228869
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+55
-7
@@ -30,7 +30,14 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Ich werde hier nicht auf jedes Detail eingehen, aber wenn Sie mehr Informationen zu einem Knoten benötigen, können Sie über die Hilfe-Schaltfläche im Menü direkt zu dessen Dokumentation gelangen.",
|
||||
"updated": 1634165900990
|
||||
"updated": 1634165900990,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Я не буду вдаваться в подробности по мере продвижения, но если Вам нужна дополнительная информауия об узле, кнопка Help в меню приведет Вас прямо к его документации.",
|
||||
"updated": 1635613175051,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -60,7 +67,14 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die Dokumentation eines Knotens kann einen oder mehrere der folgenden Abschnitte enthalten:",
|
||||
"updated": 1634165911448
|
||||
"updated": 1634165911448,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Документация узла модет включать один или несколько из следующих разделов:",
|
||||
"updated": 1635613205233,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -89,7 +103,14 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Definition: beschreibt, was der Knoten ist oder tut.",
|
||||
"updated": 1634165918664
|
||||
"updated": 1634165918664,
|
||||
"style": "List"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Difinition: описывает, что представляет собой узел и его функции.",
|
||||
"updated": 1635613299355,
|
||||
"style": "List"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -118,7 +139,14 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Content: beschreibt, wie der Knoten funktioniert.",
|
||||
"updated": 1634165925998
|
||||
"updated": 1634165925998,
|
||||
"style": "List"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Content: описывает, как работает узел.",
|
||||
"updated": 1635613497534,
|
||||
"style": "List"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -148,7 +176,14 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Configuration: einige Knoten haben einen solchen Abschnitt.",
|
||||
"updated": 1634165931369
|
||||
"updated": 1634165931369,
|
||||
"style": "List"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Configuration: некоторые узлы могут иметь один узел.",
|
||||
"updated": 1635613523569,
|
||||
"style": "List"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -178,7 +213,14 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Technical: Der Rest der Informationen ist technischer Natur und richtet sich an Entwickler.",
|
||||
"updated": 1634165955935
|
||||
"updated": 1634165955935,
|
||||
"style": "List"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Technical: основная информация обычно носит технический характер и ориентирована на разработчиков.",
|
||||
"updated": 1635613576536,
|
||||
"style": "List"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -207,7 +249,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Klicken Sie auf die Schaltfläche \"Hilfe\" auf dem Knoten \" Data Tasks\"!",
|
||||
"updated": 1634165943580
|
||||
"updated": 1634165943580,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Нажмите кнопку на узле Data Tasks!",
|
||||
"updated": 1635627454333
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+28
-4
@@ -30,7 +30,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Wenn Sie einmal etwas kaputt machen - wie das Löschen eines Knotens oder das Ändern einer Konfiguration - und nicht wissen, wie Sie mit dem Ergebnis umgehen sollen...",
|
||||
"updated": 1634166459683
|
||||
"updated": 1634166459683,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Если Вы когда-нибудь что-то нарушили, например, удалили узел или изменили конфигурацию и не знаете, как дальше действовать...",
|
||||
"updated": 1635627557596
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -60,7 +66,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "... können Sie ganz einfach mit dem ursprünglichen Getting Started Tutorials Plugin Workspace neu beginnen!",
|
||||
"updated": 1634166463236
|
||||
"updated": 1634166463236,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "... Вы можете легко начать все сначала с исходного рабочего пространства Getting Started Tutorials Plugin Workspace!",
|
||||
"updated": 1635628049167
|
||||
}
|
||||
],
|
||||
"updated": 1622196973760
|
||||
@@ -90,7 +102,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Klicken Sie am linken Rand auf \"Workspaces\", suchen und klicken Sie auf das \"Getting Started Tutorials Plugin\"! Der ursprüngliche Plugin Workspace wird geladen und das Tutorial beginnt von neuem.",
|
||||
"updated": 1634166835790
|
||||
"updated": 1634166835790,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "В таком случае просто потяните вкладку с левой стороны, прокрутите, найдите плагин Getting Started Tutorials и нажмите на него! Загрузится исходный Plugin Workspace и учебное пособие появится снова, с самого начала!",
|
||||
"updated": 1635629001422
|
||||
}
|
||||
],
|
||||
"updated": 1622634394712
|
||||
@@ -109,7 +127,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Plugin-Workspaces gehören zum Lieferumfang. Sie können diese zu Ihrem eigenen machen oder neue Arbeitsbereiche erstellen.",
|
||||
"updated": 1634166969189
|
||||
"updated": 1634166969189,
|
||||
"style": "Success"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Plugin Workspaces поставляются вместе с системой. Давайте посмотрим, как вы можете сделать их своими собственными или создать новые рабочие пространства!",
|
||||
"updated": 1635629610043
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+35
-5
@@ -30,7 +30,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Da Sie sich nun gut zurechtfinden, möchte ich Sie auf eine kleine Tour durch den Abschnitt Data Tasks des Network Node mitnehmen.",
|
||||
"updated": 1634167620156
|
||||
"updated": 1634167620156,
|
||||
"style": "Definition"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Теперь, когда Вам удобно передвигаться, я хочу, чтобы Вы отправились в небольшую экскурсию по Network Node раздела Data Tasks.",
|
||||
"updated": 1635630043831
|
||||
}
|
||||
],
|
||||
"updated": 1622194034630
|
||||
@@ -61,7 +67,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Beachten Sie das Folgende:",
|
||||
"updated": 1634167630784
|
||||
"updated": 1634167630784,
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Обратите внимание на следующее:",
|
||||
"updated": 1635630070775
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -90,7 +102,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Der Abschnitt ist in erster Linie nach Projekt, Börse und Markt geordnet. Dies hilft Ihnen, mit mehreren Börsen und Märkten in geordneter Weise zu arbeiten.",
|
||||
"updated": 1634167647959
|
||||
"updated": 1634167647959,
|
||||
"style": "List"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Раздел делится, в первую очередь, на проекты, биржи и рынки. Он поможет Вам организованно работать со множеством бирж и рынков.",
|
||||
"updated": 1635630220075
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -119,7 +137,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Die Exchange Data Tasks und Market Data Tasks können alle Aufgaben in der Börse bzw. dem Markt steuern.",
|
||||
"updated": 1634167655448
|
||||
"updated": 1634167655448,
|
||||
"style": "List"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Узлы Exchange Data Tasks и Мarket Data Tasks могут управлять всеми задачами на бирже и рынке соответственно.",
|
||||
"updated": 1635630313880
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -148,7 +172,13 @@
|
||||
{
|
||||
"language": "DE",
|
||||
"text": "Schauen Sie sich diese Knoten und ihre Menüs an!",
|
||||
"updated": 1634167662675
|
||||
"updated": 1634167662675,
|
||||
"style": "Callout"
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Выйдите и проверьте эти узлы и их меню!",
|
||||
"updated": 1635630414259
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ exports.newFoundationsFunctionLibrariesFromOneMinToMultiTimeFrameFunctions = fun
|
||||
/*
|
||||
This module contains the functions to aggregate data into elements with
|
||||
begin and end properties. It is used by both the One Min to Market
|
||||
and One Min to Daily frameworks as a common place to haave functions
|
||||
and One Min to Daily frameworks as a common place to have functions
|
||||
used at both of them.
|
||||
*/
|
||||
const MODULE_NAME = "From One Min To Multi Time Frame Functions"
|
||||
@@ -25,9 +25,9 @@ exports.newFoundationsFunctionLibrariesFromOneMinToMultiTimeFrameFunctions = fun
|
||||
callBackFunction
|
||||
) {
|
||||
/*
|
||||
This Framework have a few contraints that we are going to check right here.
|
||||
This Framework have a few constraints that we are going to check right here.
|
||||
One of them is the fact that it can only accept one data dependency. The
|
||||
reason why is because the purpose of this framwork is to produce a transformation
|
||||
reason why is because the purpose of this framework is to produce a transformation
|
||||
between one dataset type (One-Min) to another dataset type (Multi-Time-Frame-Market).
|
||||
To do that it can only handle one dependency and it will only produce one output.
|
||||
|
||||
@@ -90,7 +90,7 @@ exports.newFoundationsFunctionLibrariesFromOneMinToMultiTimeFrameFunctions = fun
|
||||
*/
|
||||
statusReport = statusDependenciesModule.reportsByMainUtility.get('Market Starting Point')
|
||||
|
||||
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month.
|
||||
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the beginning of a month.
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
"[WARN] getContextVariables -> detectWhereTheMarketBegins-> Status Report does not exist. Retrying Later. ")
|
||||
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE)
|
||||
@@ -102,7 +102,7 @@ exports.newFoundationsFunctionLibrariesFromOneMinToMultiTimeFrameFunctions = fun
|
||||
processIndex,
|
||||
MODULE_NAME,
|
||||
'Dataset Type Standard Converter',
|
||||
{ errorDetails: "getContextVariables -> detectWhereTheMarketBegins -> Can not continue because dependecy Status Report is corrupt. " },
|
||||
{ errorDetails: "getContextVariables -> detectWhereTheMarketBegins -> Can not continue because dependency Status Report is corrupt. " },
|
||||
'Status Report Is Corrupt',
|
||||
TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput
|
||||
)
|
||||
@@ -135,7 +135,7 @@ exports.newFoundationsFunctionLibrariesFromOneMinToMultiTimeFrameFunctions = fun
|
||||
*/
|
||||
statusReport = statusDependenciesModule.reportsByMainUtility.get('Market Ending Point')
|
||||
|
||||
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month.
|
||||
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the beginning of a month.
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
"[WARN] getContextVariables -> detectWhereTheMarketEnds-> Status Report does not exist. Retrying Later. ")
|
||||
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE)
|
||||
@@ -147,7 +147,7 @@ exports.newFoundationsFunctionLibrariesFromOneMinToMultiTimeFrameFunctions = fun
|
||||
processIndex,
|
||||
MODULE_NAME,
|
||||
'Dataset Type Standard Converter',
|
||||
{ errorDetails: "getContextVariables -> detectWhereTheMarketEnds -> Can not continue because dependecy Status Report is corrupt. " },
|
||||
{ errorDetails: "getContextVariables -> detectWhereTheMarketEnds -> Can not continue because dependency Status Report is corrupt. " },
|
||||
'Status Report Is Corrupt',
|
||||
TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput
|
||||
)
|
||||
@@ -179,7 +179,7 @@ exports.newFoundationsFunctionLibrariesFromOneMinToMultiTimeFrameFunctions = fun
|
||||
*/
|
||||
statusReport = statusDependenciesModule.reportsByMainUtility.get('Self Reference')
|
||||
|
||||
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the begining of a month.
|
||||
if (statusReport === undefined) { // This means the status report does not exist, that could happen for instance at the beginning of a month.
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
"[WARN] getContextVariables -> Status Report does not exist. Retrying Later. ")
|
||||
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE)
|
||||
@@ -191,7 +191,7 @@ exports.newFoundationsFunctionLibrariesFromOneMinToMultiTimeFrameFunctions = fun
|
||||
processIndex,
|
||||
MODULE_NAME,
|
||||
'Dataset Type Standard Converter',
|
||||
{ errorDetails: "getContextVariables -> getOwnStatusReport -> Can not continue because dependecy Status Report is corrupt. " },
|
||||
{ errorDetails: "getContextVariables -> getOwnStatusReport -> Can not continue because dependency Status Report is corrupt. " },
|
||||
'Status Report Is Corrupt',
|
||||
TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].referenceParent.processOutput
|
||||
)
|
||||
@@ -203,13 +203,13 @@ exports.newFoundationsFunctionLibrariesFromOneMinToMultiTimeFrameFunctions = fun
|
||||
if (thisReport.lastFile !== undefined) {
|
||||
/*
|
||||
We get in here when the report already exists, meaning that this process
|
||||
has succesfully ran before at least once.
|
||||
has successfully ran before at least once.
|
||||
*/
|
||||
contextVariables.beginingOfMarket = new Date(thisReport.beginingOfMarket)
|
||||
|
||||
if (contextVariables.beginingOfMarket.valueOf() !== contextVariables.datetimeBeginingOfMarketFile.valueOf()) { // Reset Mechanism for Begining of the Market
|
||||
if (contextVariables.beginingOfMarket.valueOf() !== contextVariables.datetimeBeginingOfMarketFile.valueOf()) { // Reset Mechanism for Beginning of the Market
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
"[INFO] getContextVariables -> getOwnStatusReport-> Reset Mechanism for Begining of the Market Activated.")
|
||||
"[INFO] getContextVariables -> getOwnStatusReport-> Reset Mechanism for Beginning of the Market Activated.")
|
||||
|
||||
contextVariables.beginingOfMarket = new Date(
|
||||
contextVariables.datetimeBeginingOfMarketFile.getUTCFullYear() + "-" +
|
||||
@@ -243,7 +243,7 @@ exports.newFoundationsFunctionLibrariesFromOneMinToMultiTimeFrameFunctions = fun
|
||||
} else {
|
||||
/*
|
||||
We get in here when the report does not exist, meaning that this process
|
||||
has never ran succesfully before at least once.
|
||||
has never ran successfully before at least once.
|
||||
*/
|
||||
contextVariables.beginingOfMarket = new Date(
|
||||
contextVariables.datetimeBeginingOfMarketFile.getUTCFullYear() + "-" +
|
||||
@@ -352,7 +352,7 @@ exports.newFoundationsFunctionLibrariesFromOneMinToMultiTimeFrameFunctions = fun
|
||||
callBackFunction
|
||||
) {
|
||||
/*
|
||||
Here is where we read Data Depnedency's files and add their content to whatever
|
||||
Here is where we read Data Dependency's files and add their content to whatever
|
||||
we already have in our arrays in-memory. In this way the process will run as
|
||||
many days needed and it should only stop when it reaches
|
||||
the head of the market.
|
||||
@@ -394,14 +394,14 @@ exports.newFoundationsFunctionLibrariesFromOneMinToMultiTimeFrameFunctions = fun
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
"[WARN] nextDependencyDailyFile -> onFileReceived -> Error Parsing JSON -> err = " + err.stack)
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
"[WARN] nextDependencyDailyFile -> onFileReceived -> Asuming this is a temporary situation. Requesting a Retry.")
|
||||
"[WARN] nextDependencyDailyFile -> onFileReceived -> Assuming this is a temporary situation. Requesting a Retry.")
|
||||
callBackFunction(TS.projects.foundations.globals.standardResponses.DEFAULT_RETRY_RESPONSE)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
if (err.message === 'File does not exist.' || err.code === 'The specified key does not exist.') {
|
||||
/*
|
||||
When a Dependency Daily File does not exist, we will asume that the process
|
||||
When a Dependency Daily File does not exist, we will assume that the process
|
||||
of fetching data was not ran at that day and that day was skipped. In such a situation
|
||||
we will produce an empty array so that this process can continue without getting stuck
|
||||
at this date where a file is missing.
|
||||
@@ -469,7 +469,7 @@ exports.newFoundationsFunctionLibrariesFromOneMinToMultiTimeFrameFunctions = fun
|
||||
const TOTAL_OUTPUT_ELEMENTS = INPUT_FILE_TIME_FRAME_VALUE / TIME_FRAME_VALUE
|
||||
const STARTING_DATE_VALUE = contextVariables.datetimeLastProducedFile.valueOf()
|
||||
/*
|
||||
The algorithm that follows is going to agregate elements of 1 min timeFrame
|
||||
The algorithm that follows is going to aggregate elements of 1 min timeFrame
|
||||
read from Data Dependency File, into elements of each timeFrame.
|
||||
*/
|
||||
for (let i = 0; i < TOTAL_OUTPUT_ELEMENTS; i++) {
|
||||
@@ -543,7 +543,7 @@ exports.newFoundationsFunctionLibrariesFromOneMinToMultiTimeFrameFunctions = fun
|
||||
element.timestamp = (new Date(element.timestamp)).valueOf()
|
||||
}
|
||||
/*
|
||||
Here we discard all the elements out of range based on the timestamp propertiy of
|
||||
Here we discard all the elements out of range based on the timestamp property of
|
||||
the Data Dependency element.
|
||||
*/
|
||||
if (
|
||||
@@ -583,7 +583,7 @@ exports.newFoundationsFunctionLibrariesFromOneMinToMultiTimeFrameFunctions = fun
|
||||
/*
|
||||
This is the LAST type of aggregation.
|
||||
|
||||
Everything that follows will be set for each element overiding the previous
|
||||
Everything that follows will be set for each element overriding the previous
|
||||
ones, so only the last values will survive.
|
||||
*/
|
||||
for (let j = 0; j < node.outputDataset.referenceParent.parentNode.record.properties.length; j++) {
|
||||
|
||||
@@ -11,7 +11,7 @@ exports.newFoundationsGlobalsLoggerVariables = function () {
|
||||
|
||||
PROCESS_INSTANCE_LOGGER_MODULE_OBJECT This is the logger module used by the process instance.
|
||||
BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT This is the logger module instantiated at every main loop and used at downstream modules.
|
||||
LOGS_TO_DELETE_QUEUE This stores the logs that need to be deleted, for auto mantainance.
|
||||
LOGS_TO_DELETE_QUEUE This stores the logs that need to be deleted, for auto maintenance.
|
||||
|
||||
*/
|
||||
return thisObject
|
||||
|
||||
@@ -94,7 +94,7 @@ exports.newFileStorage = function newFileStorage(processIndex, host, port) {
|
||||
|
||||
logger.write(MODULE_NAME, '[INFO] FileStorage -> getTextFile -> fileLocation: ' + fileLocation)
|
||||
|
||||
/* Here we actually reaad the file. */
|
||||
/* Here we actually read the file. */
|
||||
if (host === undefined || host === 'localhost' || host === ip.address() || host === '127.0.0.1') {
|
||||
/* We read the file from the local file system. */
|
||||
const fs = SA.nodeModules.fs
|
||||
@@ -251,7 +251,7 @@ exports.newFileStorage = function newFileStorage(processIndex, host, port) {
|
||||
try {
|
||||
logger.write(MODULE_NAME, '[INFO] FileStorage -> createTextFile -> fileLocation: ' + fileLocation)
|
||||
|
||||
/* If necesary a folder or folders are created before writing the file to disk. */
|
||||
/* If necessary a folder or folders are created before writing the file to disk. */
|
||||
SA.projects.foundations.utilities.filesAndDirectories.mkDirByPathSync(fileLocation)
|
||||
|
||||
/*
|
||||
@@ -282,7 +282,7 @@ exports.newFileStorage = function newFileStorage(processIndex, host, port) {
|
||||
}
|
||||
if (keepPrevious === true) {
|
||||
/*
|
||||
In some cases, we are going to keep a copy of the previous version of the file being written. This will be usefull to recover from crashes
|
||||
In some cases, we are going to keep a copy of the previous version of the file being written. This will be useful to recover from crashes
|
||||
when the file written gets corrupted for any reason.
|
||||
*/
|
||||
fs.unlink(fileLocation + '.Previous.json', onUnlinked)
|
||||
|
||||
@@ -32,7 +32,7 @@ function newNodesWarnings() {
|
||||
let arrayItem = array[i]
|
||||
let docs = arrayItem[2]
|
||||
let nodeIdArray = arrayItem[0]
|
||||
/* We migth receive here and array of node Ids. If we dont, we receive at least one node id*/
|
||||
/* We might receive here and array of node Ids. If we dont, we receive at least one node id*/
|
||||
if (Array.isArray(nodeIdArray) === true) {
|
||||
for (let j = 0; j < nodeIdArray.length; j++) {
|
||||
let nodeId = nodeIdArray[j]
|
||||
@@ -58,7 +58,7 @@ function newNodesWarnings() {
|
||||
let docs = arrayItem[2]
|
||||
let nodeId
|
||||
let nodeIdArray = arrayItem[0]
|
||||
/* We migth receive here and array of node Ids. If we dont, we receive at least one node id*/
|
||||
/* We might receive here and array of node Ids. If we dont, we receive at least one node id*/
|
||||
if (Array.isArray(nodeIdArray) === true) {
|
||||
/* For repositioning the design space we will pick the first Id at the Node Id Array */
|
||||
nodeId = nodeIdArray[0]
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
This module represent one layer of many possible layers that could be at the Floating Space. Objects in the same layer are subject to
|
||||
the same physics, and by being at the same level, they interact with each other. For example, they can bounce when one hit the other.
|
||||
This module posesses its own physics engine. There are different types of floating objects, but this layer takes care of each of them.
|
||||
This module possesses its own physics engine. There are different types of floating objects, but this layer takes care of each of them.
|
||||
|
||||
Floating Objects Types:
|
||||
|
||||
@@ -42,7 +42,7 @@ function newFloatingLayer() {
|
||||
let invisibleFloatingObjects = []
|
||||
|
||||
/*
|
||||
Floating objects are accesible to plotters because they carry a "payload" object that was creted by them. This object includes the position
|
||||
Floating objects are accessible to plotters because they carry a "payload" object that was created by them. This object includes the position
|
||||
and visible property. When visible turns to true, this layer module will move the reference of the floating object from the invisible array
|
||||
to the visibleFloatingObjects array. If the plotter decides that the object is to far from the what the user is seeing, it can eventually
|
||||
turn the visible property off again, forcing the layer to remove the object from the visibleFloatingObjects and place it again at the invisible
|
||||
@@ -109,7 +109,7 @@ function newFloatingLayer() {
|
||||
/*
|
||||
There are two ways to look for a floating object: by handle or by index. The search by handle is done on the visible and invisible array.
|
||||
The search by index is done only on the visible ones. The search by index is usually needed when mouse events occurs. In those cases
|
||||
only objects visible to the end usser matters.
|
||||
only objects visible to the end user matters.
|
||||
*/
|
||||
|
||||
try {
|
||||
@@ -165,7 +165,7 @@ function newFloatingLayer() {
|
||||
floatingObject.drawForeground()
|
||||
}
|
||||
|
||||
/* Invisible objects on focus (freezed) should still have some priority */
|
||||
/* Invisible objects on focus (frozen) should still have some priority */
|
||||
for (let i = 0; i < invisibleFloatingObjects.length; i++) {
|
||||
let floatingObject = invisibleFloatingObjects[i]
|
||||
floatingObject.drawOnFocus()
|
||||
@@ -256,7 +256,7 @@ function newFloatingLayer() {
|
||||
floating object has a position and a speed. In fact, each floating object has two positions at the same time:
|
||||
|
||||
1. The current position: is the position of the ball, floating around.
|
||||
2. The anchor position: is the position of where the ball is achored on the plot. This one is inside the payload object controlled by the
|
||||
2. The anchor position: is the position of where the ball is anchored on the plot. This one is inside the payload object controlled by the
|
||||
plotter.
|
||||
|
||||
The anchor position influences the current position, since the Physics engine will apply a gravity force to the ball's position in order
|
||||
@@ -295,7 +295,7 @@ function newFloatingLayer() {
|
||||
}
|
||||
|
||||
function enginePhysics() {
|
||||
/* This function makes all the calculations to apply phisycs on all visible floatingObjects in this layer. */
|
||||
/* This function makes all the calculations to apply physics on all visible floatingObjects in this layer. */
|
||||
|
||||
try {
|
||||
|
||||
@@ -319,8 +319,8 @@ function newFloatingLayer() {
|
||||
floatingObject.friction = floatingObject.friction - 0.00001
|
||||
}
|
||||
|
||||
floatingObject.currentSpeed.x = floatingObject.currentSpeed.x * floatingObject.friction // Desaceleration factor.
|
||||
floatingObject.currentSpeed.y = floatingObject.currentSpeed.y * floatingObject.friction // Desaceleration factor.
|
||||
floatingObject.currentSpeed.x = floatingObject.currentSpeed.x * floatingObject.friction // Deceleration factor.
|
||||
floatingObject.currentSpeed.y = floatingObject.currentSpeed.y * floatingObject.friction // Deceleration factor.
|
||||
|
||||
let payload = {
|
||||
position: undefined,
|
||||
@@ -473,7 +473,7 @@ function newFloatingLayer() {
|
||||
|
||||
function repulsionForceBetweenFloatingObjects(currentFloatingObject) {
|
||||
try {
|
||||
/* We generate a repulsion force between floatingObjects, that prevents them to be collisioning so often. */
|
||||
/* We generate a repulsion force between floatingObjects, that prevents them to be collision so often. */
|
||||
|
||||
const coulomb = 2
|
||||
|
||||
@@ -522,7 +522,7 @@ function newFloatingLayer() {
|
||||
y: unitVector.y * force
|
||||
}
|
||||
|
||||
/* We substract the force vector to the speed vector of the current floatingObject */
|
||||
/* We subtract the force vector to the speed vector of the current floatingObject */
|
||||
if (isNaN(forceVector.x) === false && isNaN(forceVector.y) === false) {
|
||||
floatingObject1.currentSpeed.x = floatingObject1.currentSpeed.x - forceVector.x
|
||||
floatingObject1.currentSpeed.y = floatingObject1.currentSpeed.y - forceVector.y
|
||||
@@ -570,7 +570,7 @@ function newFloatingLayer() {
|
||||
|
||||
function targetRepulsionForce(currentFloatingObject) {
|
||||
try {
|
||||
/* We generate a repulsion force between floatingObjects, that prevents them to be collisioning so often. */
|
||||
/* We generate a repulsion force between floatingObjects, that prevents them to be collision so often. */
|
||||
|
||||
const coulomb = 2
|
||||
|
||||
@@ -631,7 +631,7 @@ function newFloatingLayer() {
|
||||
y: unitVector.y * force
|
||||
}
|
||||
|
||||
/* We substract the force vector to the speed vector of the current floatingObject */
|
||||
/* We subtract the force vector to the speed vector of the current floatingObject */
|
||||
|
||||
if (isNaN(forceVector.x) === false && isNaN(forceVector.y) === false) {
|
||||
floatingObject1.currentSpeed.x = floatingObject1.currentSpeed.x - forceVector.x
|
||||
|
||||
@@ -15,7 +15,7 @@ function newFloatingObject() {
|
||||
type: undefined, // Currently there are two types of Floating Objects: Profile Balls, and Notes.
|
||||
currentSpeed: 0, // This is the current speed of the floating object.
|
||||
currentMass: 0, // This is the current mass of the floating object, including its zoom applied.
|
||||
friction: 0, // This is a factor that will ultimatelly desacelerate the floating object.
|
||||
friction: 0, // This is a factor that will ultimately decelerate the floating object.
|
||||
targetFriction: 0,
|
||||
rawMass: 0, // This is the mass value without zoom.
|
||||
rawRadius: 0, // This is the radius of this floating object without zoom.
|
||||
|
||||
@@ -246,7 +246,7 @@ function newFoundationsFloatingSpace() {
|
||||
}
|
||||
}
|
||||
|
||||
/* Movign the Floating Space to where the mouse is. */
|
||||
/* Moving the Floating Space to where the mouse is. */
|
||||
thisObject.container.frame.position.x = -mousePosition.x / browserCanvas.width * SPACE_SIZE + browserCanvas.width / 2
|
||||
thisObject.container.frame.position.y = -mousePosition.y / browserCanvas.height * SPACE_SIZE + browserCanvas.height / 2
|
||||
|
||||
@@ -255,13 +255,13 @@ function newFoundationsFloatingSpace() {
|
||||
}
|
||||
|
||||
function isItFar(payload, dontCheckParent) {
|
||||
/* If for any reason the paylaod is undefined we return false */
|
||||
/* If for any reason the payload is undefined we return false */
|
||||
if (payload === undefined) { return false }
|
||||
if (thisObject.inMapMode === true) { return false }
|
||||
|
||||
let radarFactor = 2 // How big is the margin
|
||||
|
||||
/* If the chain parent is not far, they we dont consither this far. */
|
||||
/* If the chain parent is not far, they we dont consider this far. */
|
||||
if (dontCheckParent !== true) {
|
||||
if (payload.chainParent !== undefined) {
|
||||
if (isItFar(payload.chainParent.payload, true) === false) { return false }
|
||||
@@ -287,7 +287,7 @@ function newFoundationsFloatingSpace() {
|
||||
/* Another exception are the ones who have reference parents */
|
||||
if (payload.referenceParent !== undefined) { return false }
|
||||
|
||||
/* Here we will check the position of a floatingobject to see if it is outside the screen, with a margin of one screen around. */
|
||||
/* Here we will check the position of a floating object to see if it is outside the screen, with a margin of one screen around. */
|
||||
let point = thisObject.container.frame.frameThisPoint(payload.position)
|
||||
|
||||
if (point.x > browserCanvas.width + browserCanvas.width * radarFactor) {
|
||||
|
||||
@@ -139,7 +139,7 @@ function newLayer() {
|
||||
}
|
||||
|
||||
function initialize(callBackFunction) {
|
||||
/* Create this objects continer */
|
||||
/* Create this objects container */
|
||||
try {
|
||||
thisObject.container = newContainer()
|
||||
thisObject.container.initialize(MODULE_NAME + ' ' + thisObject.payload.node.id)
|
||||
@@ -333,7 +333,7 @@ function newLayer() {
|
||||
}
|
||||
|
||||
function checkStatusAtShutDown() {
|
||||
/* Mechanism to recover a layer that was left loading the last time the browser was shut dowm. */
|
||||
/* Mechanism to recover a layer that was left loading the last time the browser was shut down. */
|
||||
let storedValue = UI.projects.visualScripting.utilities.nodeConfig.loadConfigProperty(thisObject.payload, 'status')
|
||||
if (storedValue !== undefined) {
|
||||
if (storedValue === LAYER_STATUS.LOADING) {
|
||||
|
||||
@@ -390,10 +390,10 @@ function newLayersPanel() {
|
||||
syncWithConfigPhysics()
|
||||
|
||||
/*
|
||||
The overall idea here is that we need to keep syncronized the panel with the layers that are
|
||||
The overall idea here is that we need to keep synchronized the panel with the layers that are
|
||||
defined at the Designer. Users can connect or disconnect any objext resulting in changes in which
|
||||
are valid layers and which not at any point in time. So what we do here is trying to keep the panel
|
||||
only with the layers that are connected to the Charting Space hiriarcy.
|
||||
only with the layers that are connected to the Charting Space hierarchy.
|
||||
|
||||
To achieve this, first we are going to move all session related cards to a local array. Then we are
|
||||
going to check for layers at the designer, and will move back the cards which still have layers well
|
||||
@@ -408,7 +408,7 @@ function newLayersPanel() {
|
||||
moveToLocalLayers()
|
||||
syncWithDesignerLayers()
|
||||
|
||||
/* At this poins all the cards still at the local array need to be removed from the panel. */
|
||||
/* At this points all the cards still at the local array need to be removed from the panel. */
|
||||
turnOffUnusedLayers()
|
||||
calculateVisbleLayers()
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ function newLeftRightButton() {
|
||||
}
|
||||
|
||||
let isInitialized = false
|
||||
/* Cointainer stuff */
|
||||
/* Container stuff */
|
||||
|
||||
thisObject.container = newContainer()
|
||||
thisObject.container.name = 'Left Right Button'
|
||||
|
||||
@@ -39,7 +39,7 @@ function newFoundationsUtilitiesFolders() {
|
||||
let originObject = originNodePropertyArray[m]
|
||||
if (originObjectArrayPropertyName === undefined) {
|
||||
/*
|
||||
In this first Use Case, we are going to connect each orgin object clone
|
||||
In this first Use Case, we are going to connect each origin object clone
|
||||
to its origin object counter part.
|
||||
*/
|
||||
let clonedObject = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(destinationNode, clonedObjectType)
|
||||
@@ -48,7 +48,7 @@ function newFoundationsUtilitiesFolders() {
|
||||
/*
|
||||
In this second Use Case, we are going to connect an inner object that is
|
||||
inside the origin object at an array. We recognize we have to do this
|
||||
because we did receive this array proeprty name.
|
||||
because we did receive this array property name.
|
||||
*/
|
||||
let originObjectArray = originObject[originObjectArrayPropertyName]
|
||||
for (let n = 0; n < originObjectArray.length; n++) {
|
||||
|
||||
@@ -582,8 +582,8 @@
|
||||
"id": "a7651e92-ab96-49fc-af9c-f936682dd7a4",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 17254.72632349072,
|
||||
"y": 44995.70258368287
|
||||
"x": 17239.012212896778,
|
||||
"y": 44951.327304290884
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 16964.948575603998,
|
||||
@@ -612,8 +612,8 @@
|
||||
"id": "e7c21a28-fea6-48cc-a97c-cc43470bb2fc",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 17224.75619673933,
|
||||
"y": 45223.348297213626
|
||||
"x": 17258.39285582414,
|
||||
"y": 45135.72180445895
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 16964.948575603998,
|
||||
@@ -642,8 +642,38 @@
|
||||
"id": "962d9bc1-4e54-463c-86ae-43aec1db0f0f",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 17042.594289134755,
|
||||
"y": 45363.12604510035
|
||||
"x": 17165.687757511656,
|
||||
"y": 45296.29174485685
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 16964.948575603998,
|
||||
"y": 45073.348297213626
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 2,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Pool",
|
||||
"name": "Liquidity Rewards ETH",
|
||||
"config": "{\n \"codeName\": \"Liquidity-Rewards-ETH\"\n}",
|
||||
"project": "Governance",
|
||||
"poolClasses": [],
|
||||
"pools": [],
|
||||
"id": "e89ba06e-2f6c-42d0-8b3e-6cfa596f0058",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 16996.307114584295,
|
||||
"y": 45371.70486582411
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 16964.948575603998,
|
||||
@@ -676,7 +706,7 @@
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": true,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 2,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
@@ -701,7 +731,7 @@
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": true,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 2,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
|
||||
Loaded 100 of 154 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user