Merge pull request #1651 from Superalgos/develop
Develop into Plugins-Docs
This commit is contained in:
431 files changed
+235925
-23873
No files matched your search
Vendored
+10
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"folders": [
|
||||
{
|
||||
"path": "C:\\Superalgos"
|
||||
}
|
||||
],
|
||||
"settings": {
|
||||
"search.maintainFileSearchCache": true
|
||||
}
|
||||
}
|
||||
Vendored
+10
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"folders": [
|
||||
{
|
||||
"path": "C:\\Superalgos"
|
||||
}
|
||||
],
|
||||
"settings": {
|
||||
"search.maintainFileSearchCache": true
|
||||
}
|
||||
}
|
||||
@@ -1,73 +0,0 @@
|
||||
exports.newMultiProject = function () {
|
||||
|
||||
let thisObject = {
|
||||
initialize: initialize
|
||||
}
|
||||
|
||||
return thisObject;
|
||||
|
||||
function initialize() {
|
||||
/*
|
||||
First thing is to load the project schema file.
|
||||
*/
|
||||
let PROJECTS_SCHEMA = require(global.env.PATH_TO_PROJECTS_REQUIRED + '/' + 'ProjectsSchema.json')
|
||||
|
||||
/*
|
||||
Here we will setup the CL object, with all the
|
||||
projects and modules that will have inside.
|
||||
*/
|
||||
global.CL = {
|
||||
projects: {}
|
||||
}
|
||||
for (let i = 0; i < PROJECTS_SCHEMA.length; i++) {
|
||||
let projectDefinition = PROJECTS_SCHEMA[i]
|
||||
global.CL.projects[projectDefinition.propertyName] = {}
|
||||
let projectInstance = global.CL.projects[projectDefinition.propertyName]
|
||||
|
||||
projectInstance.utilities = {}
|
||||
projectInstance.globals = {}
|
||||
projectInstance.functionLibraries = {}
|
||||
projectInstance.taskModules = {}
|
||||
projectInstance.processModules = {}
|
||||
projectInstance.botModules = {}
|
||||
|
||||
if (projectDefinition.CL === undefined) { continue }
|
||||
|
||||
/* Set up Utilities of this Project */
|
||||
if (projectDefinition.CL.utilities !== undefined) {
|
||||
for (let j = 0; j < projectDefinition.CL.utilities.length; j++) {
|
||||
let utilityDefinition = projectDefinition.CL.utilities[j]
|
||||
let path = global.env.PATH_TO_PROJECTS_REQUIRED + '/' + projectDefinition.name + '/' + 'CL' + '/' + 'Utilities' + '/' + utilityDefinition.fileName
|
||||
|
||||
let requiredObject = require(path)
|
||||
let requiredFunction = requiredObject[utilityDefinition.functionName]
|
||||
projectInstance.utilities[utilityDefinition.propertyName] = requiredFunction.call()
|
||||
}
|
||||
}
|
||||
|
||||
/* Set up Globals of this Project */
|
||||
if (projectDefinition.CL.globals !== undefined) {
|
||||
for (let j = 0; j < projectDefinition.CL.globals.length; j++) {
|
||||
let globalDefinition = projectDefinition.CL.globals[j]
|
||||
let path = global.env.PATH_TO_PROJECTS_REQUIRED + '/' + projectDefinition.name + '/' + 'CL' + '/' + 'Globals' + '/' + globalDefinition.fileName
|
||||
|
||||
let requiredObject = require(path)
|
||||
let requiredFunction = requiredObject[globalDefinition.functionName]
|
||||
projectInstance.globals[globalDefinition.propertyName] = requiredFunction.call()
|
||||
}
|
||||
}
|
||||
|
||||
/* Set up Function Libraries of this Project */
|
||||
if (projectDefinition.CL.functionLibraries !== undefined) {
|
||||
for (let j = 0; j < projectDefinition.CL.functionLibraries.length; j++) {
|
||||
let functionLibraryDefinition = projectDefinition.CL.functionLibraries[j]
|
||||
let path = global.env.PATH_TO_PROJECTS_REQUIRED + '/' + projectDefinition.name + '/' + 'CL' + '/' + 'Function-Libraries' + '/' + functionLibraryDefinition.fileName
|
||||
|
||||
let requiredObject = require(path)
|
||||
let requiredFunction = requiredObject[functionLibraryDefinition.functionName]
|
||||
projectInstance.functionLibraries[functionLibraryDefinition.propertyName] = requiredFunction.call()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+56
-47
@@ -18,7 +18,7 @@ process.on('uncaughtException', function (err) {
|
||||
process.on('unhandledRejection', (reason, p) => {
|
||||
// Signal user that a necissary node module is missing
|
||||
if (reason.code == 'MODULE_NOT_FOUND') {
|
||||
console.log("[ERROR] Node Modules not found. Running the node setup command and then restart")
|
||||
console.log("[ERROR] Dependency library not found. Please try running the 'node setup' command and then restart the Client.")
|
||||
console.log('[ERROR] Client -> client-> reason = ' + JSON.stringify(reason))
|
||||
process.exit(1)
|
||||
}
|
||||
@@ -67,96 +67,105 @@ let WEB3_SERVER = require('./web3Server.js')
|
||||
let GITHUB_SERVER = require('./githubServer.js')
|
||||
|
||||
/* Network Interfaces */
|
||||
let WEB_SOCKETS_INTERFACE = require('./webSocketsServer.js')
|
||||
let WEB_SOCKETS_INTERFACE = require('./webSocketsInterface.js')
|
||||
let HTTP_INTERFACE = require('./httpInterface.js')
|
||||
|
||||
try {
|
||||
/*
|
||||
The CL object is accesible everywhere at the Superalgos Client.
|
||||
It provides access to all modules built for this Client.
|
||||
*/
|
||||
global.CL = {}
|
||||
/*
|
||||
The SA object is accesible everywhere at the Superalgos Client.
|
||||
It provides access to all modules built for Superalgos in general.
|
||||
*/
|
||||
global.SA = {}
|
||||
/*
|
||||
First thing is to load the project schema file.
|
||||
*/
|
||||
global.PROJECTS_SCHEMA = require(global.env.PATH_TO_PROJECT_SCHEMA)
|
||||
/*
|
||||
Setting up the modules that will be available for the Servers Running inside this Client
|
||||
*/
|
||||
let MULTI_PROJECT = require('./MultiProject.js');
|
||||
let MULTI_PROJECT = require('../MultiProject.js');
|
||||
let MULTI_PROJECT_MODULE = MULTI_PROJECT.newMultiProject()
|
||||
MULTI_PROJECT_MODULE.initialize()
|
||||
MULTI_PROJECT_MODULE.initialize(CL, 'CL')
|
||||
MULTI_PROJECT_MODULE.initialize(SA, 'SA')
|
||||
/*
|
||||
Setting up external dependencies.
|
||||
*/
|
||||
CL.nodeModules = {
|
||||
fs: require('fs'),
|
||||
SA.nodeModules = {
|
||||
fs: require('fs'),
|
||||
nodeFetch: require('node-fetch')
|
||||
}
|
||||
|
||||
/*
|
||||
Setting up servers running inside this Client.
|
||||
*/
|
||||
CL.servers = {}
|
||||
console.log('CLIENT SERVERS:')
|
||||
console.log('')
|
||||
|
||||
WEB_SERVER = WEB_SERVER.newWebServer()
|
||||
WEB_SERVER.initialize()
|
||||
WEB_SERVER.run()
|
||||
CL.servers.WEB_SERVER = WEB_SERVER.newWebServer()
|
||||
CL.servers.WEB_SERVER.initialize()
|
||||
CL.servers.WEB_SERVER.run()
|
||||
console.log('Web Server .................................................. Started')
|
||||
|
||||
UI_FILE_SERVER = UI_FILE_SERVER.newUIFileServer()
|
||||
UI_FILE_SERVER.initialize()
|
||||
UI_FILE_SERVER.run()
|
||||
CL.servers.UI_FILE_SERVER = UI_FILE_SERVER.newUIFileServer()
|
||||
CL.servers.UI_FILE_SERVER.initialize()
|
||||
CL.servers.UI_FILE_SERVER.run()
|
||||
console.log('UI File Server .............................................. Started')
|
||||
|
||||
PROJECT_FILE_SERVER = PROJECT_FILE_SERVER.newProjectFileServer()
|
||||
PROJECT_FILE_SERVER.initialize()
|
||||
PROJECT_FILE_SERVER.run()
|
||||
CL.servers.PROJECT_FILE_SERVER = PROJECT_FILE_SERVER.newProjectFileServer()
|
||||
CL.servers.PROJECT_FILE_SERVER.initialize()
|
||||
CL.servers.PROJECT_FILE_SERVER.run()
|
||||
console.log('Project File Server ......................................... Started')
|
||||
|
||||
PLUGIN_SERVER = PLUGIN_SERVER.newPluginServer()
|
||||
PLUGIN_SERVER.initialize()
|
||||
PLUGIN_SERVER.run()
|
||||
CL.servers.PLUGIN_SERVER = PLUGIN_SERVER.newPluginServer()
|
||||
CL.servers.PLUGIN_SERVER.initialize()
|
||||
CL.servers.PLUGIN_SERVER.run()
|
||||
console.log('Plugin Server ............................................... Started')
|
||||
|
||||
DATA_FILE_SERVER = DATA_FILE_SERVER.newDataFileServer()
|
||||
DATA_FILE_SERVER.initialize()
|
||||
DATA_FILE_SERVER.run()
|
||||
CL.servers.DATA_FILE_SERVER = DATA_FILE_SERVER.newDataFileServer()
|
||||
CL.servers.DATA_FILE_SERVER.initialize()
|
||||
CL.servers.DATA_FILE_SERVER.run()
|
||||
console.log('Data File Server ............................................ Started')
|
||||
|
||||
EVENT_SERVER = EVENT_SERVER.newEventServer()
|
||||
EVENT_SERVER.initialize()
|
||||
EVENT_SERVER.run()
|
||||
CL.servers.EVENT_SERVER = EVENT_SERVER.newEventServer()
|
||||
CL.servers.EVENT_SERVER.initialize()
|
||||
CL.servers.EVENT_SERVER.run()
|
||||
console.log('Events Server ............................................... Started')
|
||||
|
||||
TASK_MANAGER_SERVER = TASK_MANAGER_SERVER.newTaskManagerServer(WEB_SOCKETS_INTERFACE, EVENT_SERVER)
|
||||
TASK_MANAGER_SERVER = TASK_MANAGER_SERVER.newTaskManagerServer()
|
||||
TASK_MANAGER_SERVER.initialize()
|
||||
TASK_MANAGER_SERVER.run()
|
||||
console.log('Task Manager Server ......................................... Started')
|
||||
|
||||
CCXT_SERVER = CCXT_SERVER.newCCXTServer()
|
||||
CCXT_SERVER.initialize()
|
||||
CCXT_SERVER.run()
|
||||
CL.servers.CCXT_SERVER = CCXT_SERVER.newCCXTServer()
|
||||
CL.servers.CCXT_SERVER.initialize()
|
||||
CL.servers.CCXT_SERVER.run()
|
||||
console.log('CCXT Server ................................................. Started')
|
||||
|
||||
WEB3_SERVER = WEB3_SERVER.newWeb3Server()
|
||||
WEB3_SERVER.initialize()
|
||||
WEB3_SERVER.run()
|
||||
CL.servers.WEB3_SERVER = WEB3_SERVER.newWeb3Server()
|
||||
CL.servers.WEB3_SERVER.initialize()
|
||||
CL.servers.WEB3_SERVER.run()
|
||||
console.log('WEB3 Server ................................................. Started')
|
||||
|
||||
GITHUB_SERVER = GITHUB_SERVER.newGithubServer()
|
||||
GITHUB_SERVER.initialize()
|
||||
GITHUB_SERVER.run()
|
||||
CL.servers.GITHUB_SERVER = GITHUB_SERVER.newGithubServer()
|
||||
CL.servers.GITHUB_SERVER.initialize()
|
||||
CL.servers.GITHUB_SERVER.run()
|
||||
console.log('Github Server ............................................... Started')
|
||||
|
||||
console.log('')
|
||||
console.log('CLIENT INTERFACES:')
|
||||
console.log('')
|
||||
|
||||
WEB_SOCKETS_INTERFACE = WEB_SOCKETS_INTERFACE.newWebSocketsInterface(EVENT_SERVER)
|
||||
WEB_SOCKETS_INTERFACE = WEB_SOCKETS_INTERFACE.newWebSocketsInterface()
|
||||
WEB_SOCKETS_INTERFACE.initialize()
|
||||
WEB_SOCKETS_INTERFACE.run()
|
||||
console.log('Web Sockets Interface ....................................... Listening at port ' + global.env.WEB_SOCKETS_INTERFACE_PORT)
|
||||
console.log('Web Sockets Interface ....................................... Listening at port ' + global.env.CLIENT_WEB_SOCKETS_INTERFACE_PORT)
|
||||
|
||||
HTTP_INTERFACE = HTTP_INTERFACE.newHttpInterface(
|
||||
WEB_SERVER,
|
||||
DATA_FILE_SERVER,
|
||||
PROJECT_FILE_SERVER,
|
||||
UI_FILE_SERVER,
|
||||
PLUGIN_SERVER,
|
||||
CCXT_SERVER,
|
||||
WEB3_SERVER,
|
||||
GITHUB_SERVER
|
||||
)
|
||||
HTTP_INTERFACE = HTTP_INTERFACE.newHttpInterface()
|
||||
HTTP_INTERFACE.initialize()
|
||||
HTTP_INTERFACE.run()
|
||||
console.log('Http Interface .............................................. Listening at port ' + global.env.HTTP_INTERFACE_PORT)
|
||||
|
||||
+142
-2
@@ -211,6 +211,7 @@ exports.newGithubServer = function newGithubServer() {
|
||||
})
|
||||
await getPrList()
|
||||
await mergePrs()
|
||||
await closePrsToMaster()
|
||||
|
||||
async function getPrList() {
|
||||
|
||||
@@ -302,6 +303,7 @@ exports.newGithubServer = function newGithubServer() {
|
||||
if (await validateMessageSignedIsGithubUsername() === false) { continue }
|
||||
if (await validateUserProfileNodeNameEqualsGithubUsername() === false) { continue }
|
||||
if (await validateUserProfileIdDoesNotBelongtoAnotherUserProfile() === false) { continue }
|
||||
if (await validateUserProfileBlockchainAccountDoesNotBelongtoAnotherUserProfile() === false) { continue }
|
||||
|
||||
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)
|
||||
@@ -470,14 +472,14 @@ exports.newGithubServer = function newGithubServer() {
|
||||
unless the existing one belongs to the same Github username.
|
||||
*/
|
||||
let userProfileIdMap = new Map()
|
||||
let pluginFileNames = await CL.projects.foundations.utilities.plugins.getPluginFileNames(
|
||||
let pluginFileNames = await SA.projects.foundations.utilities.plugins.getPluginFileNames(
|
||||
'Governance',
|
||||
'User-Profiles'
|
||||
)
|
||||
for (let i = 0; i < pluginFileNames.length; i++) {
|
||||
let pluginFileName = pluginFileNames[i]
|
||||
|
||||
let pluginFileContent = await CL.projects.foundations.utilities.plugins.getPluginFileContent(
|
||||
let pluginFileContent = await SA.projects.foundations.utilities.plugins.getPluginFileContent(
|
||||
'Governance',
|
||||
'User-Profiles',
|
||||
pluginFileName
|
||||
@@ -512,6 +514,70 @@ exports.newGithubServer = function newGithubServer() {
|
||||
}
|
||||
}
|
||||
|
||||
async function validateUserProfileBlockchainAccountDoesNotBelongtoAnotherUserProfile() {
|
||||
try {
|
||||
/*
|
||||
Validation #7 The blockchain account of the User Profile can not be the
|
||||
blockchain account of an already existing User Profile
|
||||
unless the existing one belongs to the same Github username.
|
||||
*/
|
||||
let userProfileIdMap = new Map()
|
||||
let pluginFileNames = await SA.projects.foundations.utilities.plugins.getPluginFileNames(
|
||||
'Governance',
|
||||
'User-Profiles'
|
||||
)
|
||||
for (let i = 0; i < pluginFileNames.length; i++) {
|
||||
let pluginFileName = pluginFileNames[i]
|
||||
let pluginFileContent = await SA.projects.foundations.utilities.plugins.getPluginFileContent(
|
||||
'Governance',
|
||||
'User-Profiles',
|
||||
pluginFileName
|
||||
)
|
||||
|
||||
let otherUserProfile = JSON.parse(pluginFileContent)
|
||||
|
||||
let config = JSON.parse(otherUserProfile.config)
|
||||
let messageSigned = JSON.stringify(config.signature)
|
||||
let serverResponse = await CL.servers.WEB3_SERVER.recoverAddress(
|
||||
messageSigned
|
||||
)
|
||||
userProfileIdMap.set(serverResponse.address, otherUserProfile.name)
|
||||
}
|
||||
|
||||
let config = JSON.parse(userProfile.config)
|
||||
let messageSigned = JSON.stringify(config.signature)
|
||||
let serverResponse = await CL.servers.WEB3_SERVER.recoverAddress(
|
||||
messageSigned
|
||||
)
|
||||
|
||||
let testUserProfile = userProfileIdMap.get(serverResponse.address)
|
||||
if (testUserProfile === undefined) { return true }
|
||||
if (testUserProfile !== userProfile.name) {
|
||||
|
||||
console.log('[INFO] Github Server -> mergeGithubPullRequests -> Validation #7 Failed -> Pull Request "' + pullRequest.title + '" not merged because the User Profile Blockchain Account already exists and belongs to another User Profile on record. -> Profile Blockchain Account = ' + serverResponse.address + '-> User Profile with the same Blockchain Account = ' + testUserProfile)
|
||||
|
||||
await CL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME)
|
||||
await octokit.rest.issues.createComment({
|
||||
owner: owner,
|
||||
repo: repo,
|
||||
issue_number: pullRequest.number,
|
||||
body: 'This Pull Request could not be automatically merged and was closed by the Superalgos Governance System because the User Profile Blockchain Account already exists and belongs to another User Profile on record. \n\nUser Profile Blockchain Account = "' + serverResponse.address + '" \n\n User Profile with the same Blockchain Account = "' + testUserProfile + '"'
|
||||
});
|
||||
|
||||
await CL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME)
|
||||
await octokit.rest.pulls.update({
|
||||
owner: owner,
|
||||
repo: repo,
|
||||
pull_number: pullRequest.number,
|
||||
state: 'closed'
|
||||
});
|
||||
return false
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err.stack)
|
||||
}
|
||||
}
|
||||
|
||||
async function mergePullRequest() {
|
||||
/*
|
||||
All validations passed, we will proceed an merge this Pull Request.
|
||||
@@ -527,6 +593,80 @@ exports.newGithubServer = function newGithubServer() {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async function closePrsToMaster() {
|
||||
|
||||
let githubPrListMaster = []
|
||||
const per_page = 100 // Max
|
||||
let page = 0
|
||||
|
||||
try {
|
||||
page++
|
||||
|
||||
await CL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME)
|
||||
|
||||
let listResponse = await octokit.rest.pulls.list({
|
||||
owner: owner,
|
||||
repo: repo,
|
||||
state: 'open',
|
||||
head: undefined,
|
||||
base: 'master',
|
||||
sort: undefined,
|
||||
direction: undefined,
|
||||
per_page: per_page,
|
||||
page: page
|
||||
});
|
||||
|
||||
if (listResponse.data.length < 100) {
|
||||
lastPage = true
|
||||
}
|
||||
console.log('[INFO] Github Server -> mergeGithubPullRequests -> doGithub -> closePrsToMaster -> Receiving Page = ' + page)
|
||||
for (let i = 0; i < listResponse.data.length; i++) {
|
||||
let pullRequest = listResponse.data[i]
|
||||
console.log('[INFO] Github Server -> mergeGithubPullRequests -> doGithub -> closePrsToMaster -> Pull Request "' + pullRequest.title + '" found and added to the list to validate. ')
|
||||
githubPrListMaster.push(pullRequest)
|
||||
}
|
||||
console.log('[INFO] Github Server -> mergeGithubPullRequests -> doGithub -> closePrsToMaster -> Received = ' + listResponse.data.length)
|
||||
|
||||
for (let i = 0; i < githubPrListMaster.length; i++) {
|
||||
let pullRequest = githubPrListMaster[i]
|
||||
|
||||
await CL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME)
|
||||
await octokit.rest.issues.createComment({
|
||||
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.'
|
||||
});
|
||||
|
||||
await CL.projects.foundations.utilities.asyncFunctions.sleep(GITHUB_API_WAITING_TIME)
|
||||
await octokit.rest.pulls.update({
|
||||
owner: owner,
|
||||
repo: repo,
|
||||
pull_number: pullRequest.number,
|
||||
state: 'closed'
|
||||
});
|
||||
}
|
||||
|
||||
} catch (err) {
|
||||
console.log(err)
|
||||
|
||||
if (err.stack.indexOf('last page') >= 0) {
|
||||
return
|
||||
} else {
|
||||
console.log('[ERROR] Github Server -> mergeGithubPullRequests -> doGithub -> closePrsToMaster ->Method call produced an error.')
|
||||
console.log('[ERROR] Github Server -> mergeGithubPullRequests -> doGithub -> closePrsToMaster ->err.stack = ' + err.stack)
|
||||
console.log('[ERROR] Github Server -> mergeGithubPullRequests -> doGithub -> closePrsToMaster ->repository = ' + repository)
|
||||
console.log('[ERROR] Github Server -> mergeGithubPullRequests -> doGithub -> closePrsToMaster ->username = ' + username)
|
||||
console.log('[ERROR] Github Server -> mergeGithubPullRequests -> doGithub -> closePrsToMaster ->token starts with = ' + token.substring(0, 10) + '...')
|
||||
console.log('[ERROR] Github Server -> mergeGithubPullRequests -> doGithub -> closePrsToMaster ->token ends with = ' + '...' + token.substring(token.length - 10))
|
||||
error = err
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} catch (err) {
|
||||
console.log('[ERROR] Github Server -> mergeGithubPullRequests -> doGithub -> err.stack = ' + err.stack)
|
||||
}
|
||||
|
||||
+33
-25
@@ -1,13 +1,4 @@
|
||||
exports.newHttpInterface = function newHttpInterface(
|
||||
WEB_SERVER,
|
||||
DATA_FILE_SERVER,
|
||||
PROJECT_FILE_SERVER,
|
||||
UI_FILE_SERVER,
|
||||
PLUGIN_SERVER,
|
||||
CCXT_SERVER,
|
||||
WEB3_SERVER,
|
||||
GITHUB_SERVER
|
||||
) {
|
||||
exports.newHttpInterface = function newHttpInterface() {
|
||||
|
||||
/*
|
||||
IMPORTANT: If you are reviewing the code of the project please note
|
||||
@@ -111,7 +102,7 @@ exports.newHttpInterface = function newHttpInterface(
|
||||
switch (params.method) {
|
||||
case 'getNetworkClientStatus': {
|
||||
|
||||
let serverResponse = await WEB3_SERVER.getNetworkClientStatus(
|
||||
let serverResponse = await CL.servers.WEB3_SERVER.getNetworkClientStatus(
|
||||
params.host,
|
||||
params.port,
|
||||
params.interface
|
||||
@@ -122,7 +113,7 @@ exports.newHttpInterface = function newHttpInterface(
|
||||
}
|
||||
case 'createWalletAccount': {
|
||||
|
||||
let serverResponse = await WEB3_SERVER.createWalletAccount(
|
||||
let serverResponse = await CL.servers.WEB3_SERVER.createWalletAccount(
|
||||
params.entropy
|
||||
)
|
||||
|
||||
@@ -131,7 +122,7 @@ exports.newHttpInterface = function newHttpInterface(
|
||||
}
|
||||
case 'getWalletBalances': {
|
||||
|
||||
let serverResponse = await WEB3_SERVER.getWalletBalances(
|
||||
let serverResponse = await CL.servers.WEB3_SERVER.getWalletBalances(
|
||||
params.host,
|
||||
params.port,
|
||||
params.interface,
|
||||
@@ -143,7 +134,7 @@ exports.newHttpInterface = function newHttpInterface(
|
||||
}
|
||||
case 'signData': {
|
||||
|
||||
let serverResponse = await WEB3_SERVER.signData(
|
||||
let serverResponse = await CL.servers.WEB3_SERVER.signData(
|
||||
params.privateKey,
|
||||
params.data
|
||||
)
|
||||
@@ -153,7 +144,7 @@ exports.newHttpInterface = function newHttpInterface(
|
||||
}
|
||||
case 'recoverAddress': {
|
||||
|
||||
let serverResponse = await WEB3_SERVER.recoverAddress(
|
||||
let serverResponse = await CL.servers.WEB3_SERVER.recoverAddress(
|
||||
params.signature
|
||||
)
|
||||
|
||||
@@ -162,7 +153,7 @@ exports.newHttpInterface = function newHttpInterface(
|
||||
}
|
||||
case 'mnemonicToPrivateKey': {
|
||||
|
||||
let serverResponse = await WEB3_SERVER.mnemonicToPrivateKey(
|
||||
let serverResponse = await CL.servers.WEB3_SERVER.mnemonicToPrivateKey(
|
||||
params.mnemonic
|
||||
)
|
||||
|
||||
@@ -747,6 +738,13 @@ exports.newHttpInterface = function newHttpInterface(
|
||||
console.log('[ERROR] httpInterface -> App -> Contribute -> doGit -> commitMessage = ' + commitMessage)
|
||||
console.log('[ERROR] httpInterface -> App -> Contribute -> doGit -> currentBranch = ' + currentBranch)
|
||||
console.log('[ERROR] httpInterface -> App -> Contribute -> doGit -> contributionsBranch = ' + contributionsBranch)
|
||||
console.log('')
|
||||
console.log('Torubleshooting Tips:')
|
||||
console.log('')
|
||||
console.log('1. Make sure that you have set up your Github Username and Token at the APIs -> Github API node at the workspace.')
|
||||
console.log('2. Make sure you are running the latest version of Git available for your OS.')
|
||||
console.log('3. Make sure that you have cloned your Superalgos repository fork, and not the main Superalgos repository.')
|
||||
console.log('4. If your fork is old, you might need to do an app.update and also a node setup at every branch. If you just reforked all is good.')
|
||||
error = err
|
||||
}
|
||||
}
|
||||
@@ -1057,7 +1055,7 @@ exports.newHttpInterface = function newHttpInterface(
|
||||
switch (params.method) {
|
||||
case 'getGithubStars': {
|
||||
|
||||
let serverResponse = await GITHUB_SERVER.getGithubStars(
|
||||
let serverResponse = await CL.servers.GITHUB_SERVER.getGithubStars(
|
||||
params.repository,
|
||||
params.username,
|
||||
params.token
|
||||
@@ -1068,7 +1066,7 @@ exports.newHttpInterface = function newHttpInterface(
|
||||
}
|
||||
case 'getGithubWatchers': {
|
||||
|
||||
let serverResponse = await GITHUB_SERVER.getGithubWatchers(
|
||||
let serverResponse = await CL.servers.GITHUB_SERVER.getGithubWatchers(
|
||||
params.repository,
|
||||
params.username,
|
||||
params.token
|
||||
@@ -1079,7 +1077,7 @@ exports.newHttpInterface = function newHttpInterface(
|
||||
}
|
||||
case 'getGithubForks': {
|
||||
|
||||
let serverResponse = await GITHUB_SERVER.getGithubForks(
|
||||
let serverResponse = await CL.servers.GITHUB_SERVER.getGithubForks(
|
||||
params.repository,
|
||||
params.username,
|
||||
params.token
|
||||
@@ -1090,7 +1088,7 @@ exports.newHttpInterface = function newHttpInterface(
|
||||
}
|
||||
case 'mergePullRequests': {
|
||||
|
||||
let serverResponse = await GITHUB_SERVER.mergePullRequests(
|
||||
let serverResponse = await CL.servers.GITHUB_SERVER.mergePullRequests(
|
||||
params.commitMessage,
|
||||
params.username,
|
||||
params.token
|
||||
@@ -1101,8 +1099,11 @@ exports.newHttpInterface = function newHttpInterface(
|
||||
}
|
||||
case 'payContributors': {
|
||||
|
||||
let serverResponse = await WEB3_SERVER.payContributors(
|
||||
params.signature
|
||||
let serverResponse = await CL.servers.WEB3_SERVER.payContributors(
|
||||
params.contractAddress,
|
||||
params.contractAbi,
|
||||
params.paymentsArray,
|
||||
params.mnemonic
|
||||
)
|
||||
|
||||
respondWithContent(JSON.stringify(serverResponse), httpResponse)
|
||||
@@ -1349,7 +1350,7 @@ exports.newHttpInterface = function newHttpInterface(
|
||||
let project = unescape(requestParameters[2])
|
||||
let folder = unescape(requestParameters[3])
|
||||
|
||||
let response = await CL.projects.foundations.utilities.plugins.getPluginFileNames(
|
||||
let response = await SA.projects.foundations.utilities.plugins.getPluginFileNames(
|
||||
project,
|
||||
folder
|
||||
)
|
||||
@@ -1383,11 +1384,18 @@ exports.newHttpInterface = function newHttpInterface(
|
||||
let folder = unescape(requestParameters[3])
|
||||
let fileName = unescape(requestParameters[4])
|
||||
|
||||
let response = await CL.projects.foundations.utilities.plugins.getPluginFileContent(
|
||||
let response = await SA.projects.foundations.utilities.plugins.getPluginFileContent(
|
||||
project,
|
||||
folder,
|
||||
fileName
|
||||
)
|
||||
).catch(err => {
|
||||
let error = {
|
||||
result: 'Fail Because',
|
||||
message: err
|
||||
}
|
||||
respondWithContent(JSON.stringify(error), httpResponse)
|
||||
return
|
||||
})
|
||||
|
||||
respondWithContent(response, httpResponse)
|
||||
|
||||
|
||||
Generated
+30
@@ -1397,6 +1397,36 @@
|
||||
"setimmediate": "^1.0.5"
|
||||
}
|
||||
},
|
||||
"ethereumjs-common": {
|
||||
"version": "1.5.2",
|
||||
"resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz",
|
||||
"integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA=="
|
||||
},
|
||||
"ethereumjs-tx": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz",
|
||||
"integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==",
|
||||
"requires": {
|
||||
"ethereumjs-common": "^1.5.0",
|
||||
"ethereumjs-util": "^6.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"ethereumjs-util": {
|
||||
"version": "6.2.1",
|
||||
"resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz",
|
||||
"integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==",
|
||||
"requires": {
|
||||
"@types/bn.js": "^4.11.3",
|
||||
"bn.js": "^4.11.0",
|
||||
"create-hash": "^1.1.2",
|
||||
"elliptic": "^6.5.2",
|
||||
"ethereum-cryptography": "^0.1.3",
|
||||
"ethjs-util": "0.1.6",
|
||||
"rlp": "^2.2.3"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"ethereumjs-util": {
|
||||
"version": "7.1.0",
|
||||
"resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.0.tgz",
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
"@octokit/rest": "^18.9.0",
|
||||
"ccxt": "^1.51.98",
|
||||
"child_process": "^1.0.2",
|
||||
"ethereumjs-common": "^1.5.2",
|
||||
"ethereumjs-tx": "^2.1.2",
|
||||
"ethers": "^5.4.4",
|
||||
"lookpath": "^1.2.2",
|
||||
"node-fetch": "2.6.1",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
exports.newTaskManagerServer = function newTaskManagerServer(WEB_SOCKETS_INTERFACE, EVENT_SERVER) {
|
||||
exports.newTaskManagerServer = function newTaskManagerServer() {
|
||||
|
||||
let thisObject = {
|
||||
initialize: initialize,
|
||||
@@ -263,7 +263,7 @@
|
||||
responseWaiters.set(command.callerId, responseCallBack)
|
||||
}
|
||||
|
||||
EVENT_SERVER.onMessage(JSON.stringify(command), thisObject.onMessage)
|
||||
CL.servers.EVENT_SERVER.onMessage(JSON.stringify(command), thisObject.onMessage)
|
||||
} catch (err) {
|
||||
console.log('[ERROR] Client -> Task Manager Server -> sendCommand -> Error Sending Command to Events Server -> command = ' + JSON.stringify(command))
|
||||
console.log('[ERROR] Client -> Task Manager Server -> sendCommand -> Error Sending Command to Events Server -> error = ' + err.stack)
|
||||
|
||||
+81
-3
@@ -8,7 +8,8 @@ exports.newWeb3Server = function newWeb3Server() {
|
||||
getWalletBalances: getWalletBalances,
|
||||
signData: signData,
|
||||
recoverAddress: recoverAddress,
|
||||
mnemonicToPrivateKey: mnemonicToPrivateKey,
|
||||
mnemonicToPrivateKey: mnemonicToPrivateKey,
|
||||
payContributors: payContributors,
|
||||
initialize: initialize,
|
||||
finalize: finalize,
|
||||
run: run
|
||||
@@ -245,13 +246,13 @@ exports.newWeb3Server = function newWeb3Server() {
|
||||
|
||||
if (wallet.privateKey !== undefined) {
|
||||
return {
|
||||
address: wallet.address,
|
||||
address: wallet.address,
|
||||
privateKey: wallet.privateKey,
|
||||
result: 'Ok'
|
||||
}
|
||||
} else {
|
||||
return {
|
||||
address: undefined,
|
||||
address: undefined,
|
||||
privateKey: undefined,
|
||||
result: 'Fail'
|
||||
}
|
||||
@@ -260,6 +261,83 @@ exports.newWeb3Server = function newWeb3Server() {
|
||||
} catch (err) {
|
||||
return { error: 'Could not convert to Private Key. ' + err.stack }
|
||||
}
|
||||
}
|
||||
|
||||
async function payContributors(contractAddress, contractAbi, paymentsArray, mnemonic) {
|
||||
try {
|
||||
let response = await mnemonicToPrivateKey(mnemonic)
|
||||
let privateKey = response.privateKey
|
||||
|
||||
for (let i = 0; i < paymentsArray.length; i++) {
|
||||
await CL.projects.foundations.utilities.asyncFunctions.sleep(10000)
|
||||
let payment = paymentsArray[i]
|
||||
sendTokens(
|
||||
i + 1,
|
||||
payment.userProfile,
|
||||
payment.from,
|
||||
payment.to,
|
||||
payment.amount
|
||||
)
|
||||
}
|
||||
|
||||
async function sendTokens(number, userProfile, fromAddress, toAddress, tokenAmount) {
|
||||
try {
|
||||
console.log('')
|
||||
console.log('---------------------------------------------------------------------------------------------------------------------------------------------------')
|
||||
console.log(' Payment # ' + number + ' - User Profile: ' + userProfile + ' - SA Tokens Amount: ' + tokenAmount / 1000000000000000000 + ' - Address: ' + toAddress)
|
||||
console.log('---------------------------------------------------------------------------------------------------------------------------------------------------')
|
||||
console.log('')
|
||||
|
||||
const Tx = require('ethereumjs-tx').Transaction;
|
||||
const web3 = new Web3(new Web3.providers.HttpProvider('https://bsc-dataseed.binance.org/'))
|
||||
const amount = web3.utils.toHex(tokenAmount)
|
||||
privateKey = privateKey.replace('0x', '')
|
||||
const privateKeyBuffer = Buffer.from(privateKey, 'hex')
|
||||
const contractAbiObject = JSON.parse(contractAbi)
|
||||
const contract = new web3.eth.Contract(contractAbiObject, contractAddress, { from: fromAddress })
|
||||
const Common = require('ethereumjs-common').default
|
||||
const BSC_FORK = Common.forCustomChain(
|
||||
'mainnet',
|
||||
{
|
||||
name: 'Binance Smart Chain Mainnet',
|
||||
networkId: 56,
|
||||
chainId: 56,
|
||||
url: 'https://bsc-dataseed.binance.org/'
|
||||
},
|
||||
'istanbul',
|
||||
);
|
||||
|
||||
const nonce = await web3.eth.getTransactionCount(fromAddress);
|
||||
|
||||
const rawTransaction = {
|
||||
"from": fromAddress,
|
||||
"gasPrice": web3.utils.toHex(5000000000),
|
||||
"gasLimit": web3.utils.toHex(210000),
|
||||
"to": contractAddress, "value": "0x0",
|
||||
"data": contract.methods.transfer(toAddress, amount).encodeABI(),
|
||||
"nonce": web3.utils.toHex(nonce)
|
||||
};
|
||||
|
||||
const transaction = new Tx(rawTransaction, { 'common': BSC_FORK })
|
||||
transaction.sign(privateKeyBuffer)
|
||||
|
||||
console.log('Transaction:', rawTransaction)
|
||||
const result = await web3.eth.sendSignedTransaction('0x' + transaction.serialize().toString('hex'))
|
||||
console.log('Result:', result)
|
||||
return result
|
||||
} catch (err) {
|
||||
console.log('[ERROR] web3Server -> sendTokens -> err.stack = ' + err.stack)
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
address: wallet.address,
|
||||
privateKey: wallet.privateKey,
|
||||
result: 'Ok'
|
||||
}
|
||||
|
||||
} catch (err) {
|
||||
return { error: 'Could not convert to Private Key. ' + err.stack }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,5 @@
|
||||
exports.newWebSocketsInterface = function newWebSocketsInterface(EVENT_SERVER) {
|
||||
exports.newWebSocketsInterface = function newWebSocketsInterface() {
|
||||
|
||||
const MODULE = "Web Sockets Interface"
|
||||
const LOG_INFO = false
|
||||
|
||||
let thisObject = {
|
||||
@@ -11,7 +10,7 @@
|
||||
|
||||
const WEB_SOCKET = require('ws')
|
||||
let socketServer
|
||||
let port = global.env.WEB_SOCKETS_INTERFACE_PORT
|
||||
let port = global.env.CLIENT_WEB_SOCKETS_INTERFACE_PORT
|
||||
|
||||
return thisObject
|
||||
|
||||
@@ -76,7 +75,7 @@
|
||||
lastNonce = nonce
|
||||
|
||||
try {
|
||||
let jsonCheck = JSON.parse(messageToEventServer)
|
||||
JSON.parse(messageToEventServer)
|
||||
} catch (err) {
|
||||
console.log('[ERROR] Client -> Web Sockets Interface -> run -> setUpWebSocketServer -> Message received from the browser is not a valid JSON. message = ' + message.substring(0, 1000))
|
||||
console.log('[ERROR] Client -> Web Sockets Interface -> run -> setUpWebSocketServer -> Message received from the browser is not a valid JSON. messageToEventServer = ' + messageToEventServer)
|
||||
@@ -92,7 +91,7 @@
|
||||
}
|
||||
|
||||
|
||||
EVENT_SERVER.onMessage(messageToEventServer, onResponse)
|
||||
CL.servers.EVENT_SERVER.onMessage(messageToEventServer, onResponse)
|
||||
|
||||
function onResponse(message) {
|
||||
socket.send(message)
|
||||
@@ -0,0 +1,78 @@
|
||||
exports.newDesktopApp = function newDesktopApp() {
|
||||
|
||||
let thisObject = {
|
||||
run: run
|
||||
}
|
||||
|
||||
return thisObject
|
||||
|
||||
async function run() {
|
||||
/*
|
||||
let socialGraphService = NT.projects.network.modules.socialGraph.newSocialGraph()
|
||||
await socialGraphService.initialize()
|
||||
*/
|
||||
/*
|
||||
Let's start the Network Interfaces
|
||||
*/
|
||||
DK.webSocketsClient = SA.projects.network.modules.webSocketsClient.newNetworkModulesWebSocketsClient()
|
||||
await DK.webSocketsClient.initialize()
|
||||
|
||||
let queryMessage
|
||||
let query
|
||||
/*
|
||||
Test Query User Profiles.
|
||||
*/
|
||||
queryMessage = {
|
||||
queryType: SA.projects.socialTrading.globals.queryTypes.USER_PROFILES,
|
||||
emitterUserProfileId: DK.TEST_NETWORK_CLIENT_USER_PROFILE_ID,
|
||||
initialIndex: 'Last',
|
||||
amountRequested: 10,
|
||||
direction: 'Past'
|
||||
}
|
||||
|
||||
query = {
|
||||
requestType: 'Query',
|
||||
queryMessage: JSON.stringify(queryMessage)
|
||||
}
|
||||
|
||||
await DK.webSocketsClient.sendMessage(
|
||||
JSON.stringify(query)
|
||||
)
|
||||
.then(showProfiles)
|
||||
.catch(onError)
|
||||
|
||||
function showProfiles(profiles) {
|
||||
console.log(profiles)
|
||||
}
|
||||
/*
|
||||
Test Query User Profile Stats.
|
||||
*/
|
||||
queryMessage = {
|
||||
queryType: SA.projects.socialTrading.globals.queryTypes.USER_PROFILE_STATS,
|
||||
emitterUserProfileId: DK.TEST_NETWORK_CLIENT_USER_PROFILE_ID,
|
||||
targetUserProfileId: DK.TEST_NETWORK_CLIENT_USER_PROFILE_ID
|
||||
}
|
||||
|
||||
query = {
|
||||
requestType: 'Query',
|
||||
queryMessage: JSON.stringify(queryMessage)
|
||||
}
|
||||
|
||||
await DK.webSocketsClient.sendMessage(
|
||||
JSON.stringify(query)
|
||||
)
|
||||
.then(showProfilesStats)
|
||||
.catch(onError)
|
||||
|
||||
function showProfilesStats(profile) {
|
||||
console.log(profile)
|
||||
}
|
||||
|
||||
/*
|
||||
Error Handling
|
||||
*/
|
||||
function onError(errorMessage) {
|
||||
console.log('[ERROR] Query not executed. ' + errorMessage)
|
||||
}
|
||||
}
|
||||
}
|
||||
+3
-2
@@ -2,13 +2,14 @@ exports.newEnvironment = function () {
|
||||
|
||||
let thisObject = {
|
||||
WEB_SERVER_URL: 'localhost',
|
||||
WEB_SOCKETS_INTERFACE_PORT: 18041,
|
||||
CLIENT_WEB_SOCKETS_INTERFACE_PORT: 18041,
|
||||
HTTP_INTERFACE_PORT: 34248,
|
||||
PATH_TO_TASK_SERVER: './TaskServer',
|
||||
PATH_TO_DATA_STORAGE: './Data-Storage',
|
||||
PATH_TO_PROJECTS: './Projects',
|
||||
PATH_TO_LOG_FILES: './Log-Files',
|
||||
PATH_TO_PROJECTS_REQUIRED: '../Projects',
|
||||
PATH_TO_PROJECTS_REQUIRED: './Projects',
|
||||
PATH_TO_PROJECT_SCHEMA: '../Projects/ProjectsSchema.json',
|
||||
PATH_TO_UI: './UI',
|
||||
PATH_TO_DATA_FILES: './UI/Data-Files/src',
|
||||
PATH_TO_CLIENT: './Client/',
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
exports.newEnvironment = function () {
|
||||
|
||||
let thisObject = {
|
||||
WEB_SERVER_URL: 'localhost',
|
||||
CLIENT_WEB_SOCKETS_INTERFACE_PORT: 18041,
|
||||
NETWORK_WEB_SOCKETS_INTERFACE_PORT: 18042,
|
||||
HTTP_INTERFACE_PORT: 34248,
|
||||
PATH_TO_TASK_SERVER: './TaskServer',
|
||||
PATH_TO_DATA_STORAGE: './Data-Storage',
|
||||
PATH_TO_PROJECTS: './Projects',
|
||||
PATH_TO_LOG_FILES: './Log-Files',
|
||||
PATH_TO_PROJECTS_REQUIRED: './Projects',
|
||||
PATH_TO_PROJECT_SCHEMA: './Projects/ProjectsSchema.json',
|
||||
PATH_TO_UI: './UI',
|
||||
PATH_TO_DATA_FILES: './UI/Data-Files/src',
|
||||
PATH_TO_CLIENT: './Client/',
|
||||
PATH_TO_DEFAULT_WORKSPACE: './Projects/Foundations/Plugins/Workspaces',
|
||||
PATH_TO_MY_WORKSPACES: './My-Workspaces',
|
||||
PATH_TO_FONTS: './Client/WebServer/Fonts'
|
||||
}
|
||||
|
||||
return thisObject
|
||||
}
|
||||
-361
@@ -1,361 +0,0 @@
|
||||
# Getting Started Guide
|
||||
|
||||
All procedures are the same for Windows, Linux, or Mac OS. Raspberry Pi terminal commands have been included for ease of use.
|
||||
|
||||
> **IMPORTANT:** Remote installations and minimalist hardware —both virtual and physical— are better suited for production deployments, where the use of the GUI is minimal. We highly recommend learning Superalgos in a local installation. Mastering the system takes time, and the use of the GUI to go through in-app tutorials is crucial during the learning process. Your experience will be orders of magnitude better if you follow this advice: leave remote installations and minimalist hardware for when you are ready to start trading live.
|
||||
|
||||
|
||||
|
||||
# Pre-Requisites
|
||||
|
||||
## 1. Node JS Installation
|
||||
|
||||
If you don't have it yet, download and install Node.js.
|
||||
|
||||
Node JS is an open-source server environment required to run Superalgos.
|
||||
|
||||
**A.** Go to the Node JS [download page](https://nodejs.org/en/download/).
|
||||
|
||||
**B.** Download your system's installer. Select *LTS Recommended for Most Users* and click the big Windows or macOS Installer button. If you are on Linux, the installer is listed further down the page.
|
||||
|
||||
**C.** Run the installer with the default configuration — just click Next until Node.JS is fully installed. That's it! You can continue with step 2 (Git Installation).
|
||||
|
||||
<hr>
|
||||
|
||||
**NODE JS INSTALLATION FOR RASPBERRY PI USERS**
|
||||
|
||||
You may install Node.JS just like you would on any other machine as per the above instructions. As an alternative, you may also try the following from the SSH Terminal.
|
||||
|
||||
**NOTE:** It is best to use the most current and updated version of the FULL PiOS image.
|
||||
|
||||
```
|
||||
curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
|
||||
```
|
||||
Followed by:
|
||||
```
|
||||
sudo apt-get install -y nodejs
|
||||
```
|
||||
It is also required to install the Node Package Manager for dependancy management.
|
||||
```
|
||||
sudo apt install npm
|
||||
```
|
||||
You may also type the following to verify Node.js and NPM installation and version.
|
||||
```
|
||||
node -v
|
||||
```
|
||||
```
|
||||
npm -v
|
||||
```
|
||||
|
||||
<hr>
|
||||
|
||||
## 2. Git Installation
|
||||
|
||||
Download and install Git.
|
||||
|
||||
Git is an open-source distributed version control system required to download and stay up to date with Superalgos.
|
||||
|
||||
**A.** Go to the Git [download page](https://git-scm.com/downloads).
|
||||
|
||||
**B.** Download the version for your Operating System.
|
||||
|
||||
**C.** Run the installer with the default configuration — just click Next until Git is fully installed.
|
||||
|
||||
**IMPORTANT:** The latest version of Git is required to handle the authentication with GitHub.com.
|
||||
|
||||
**NOTE FOR MAC USERS:** Depending on your setup, installing Git may be optional. The native XCode Command Line Developer Tools seems to work well. If you do install Git, we have tested Tim Harper's binary installer successfully.
|
||||
|
||||
<hr>
|
||||
|
||||
**GIT INSTALLATION FOR RASPBERRY PI USERS**
|
||||
|
||||
Just like with Node.JS, you may follow the above instructions to install Git, or use the SSH Terminal command. The most recent version of PiOS has Git already installed, so this may give you an error. The error will not affect your installation.
|
||||
```
|
||||
sudo apt-get install git
|
||||
```
|
||||
|
||||
<hr>
|
||||
|
||||
## 3. Google Chrome or Safari
|
||||
|
||||
Use Chrome, or Safari on Mac. These are the only tested browsers.
|
||||
|
||||
**A.** Go to the Chrome [download page](https://www.google.com/chrome/).
|
||||
|
||||
**B.** Run the installer.
|
||||
|
||||
Before you begin, it is recommended that you set up Chrome/Safari as your default browser.
|
||||
|
||||
**IMPORTANT:** Use Chrome/Safari so that you have a similar environment as the dev team in case you need help. We are not testing on any other browsers, and it is a well-known fact that browsers behave differently.
|
||||
|
||||
# Superalgos Client Installation
|
||||
|
||||
## 1. Fork the Superalgos Repository
|
||||
|
||||
**A.** Scroll the page all the way to the top. Find and click the **Fork** button to create your fork/copy of this repository. To fork Superalgos you need a Github account. If you don't have one, go ahead and create it.
|
||||
|
||||
**NOTE:** A Fork is required for your contributions to the project. The reason why Superalgos is free and open-source is that the project has set up a <a href="https://superalgos.org/project-one-pager.shtml" target="_blank">Collective Business</a> in which all users may participate. The way to participate is to <a href="https://superalgos.org/community-contribute.shtml" target="_blank">contribute</a> to make Superalgos better. The project's <a href="https://superalgos.org/token-overview.shtml" target="_blank">token</a> is distributed among contributors.
|
||||
|
||||
## 2. Clone Your Fork
|
||||
|
||||
**A.** Once the fork is created, you will land on the page of your fork. Copy the URL from your browser's address bar.
|
||||
|
||||
**B.** In your computer/laptop/server, open a command prompt or terminal. Make sure you are in a directory where you have write permissions (on most systems the terminal will open in your user's home directory, so you're good). Clone the git repository using the command:
|
||||
|
||||
```
|
||||
git clone <URL of your Superalgos fork>
|
||||
```
|
||||
|
||||
For example, if your Github username is John, the command will look like this:
|
||||
|
||||
```
|
||||
git clone https://github.com/John/Superalgos
|
||||
```
|
||||
|
||||
This creates the `Superalgos` folder in the current directory, which contains the whole installation.
|
||||
|
||||
## 3. Install Node Dependencies
|
||||
|
||||
After the Superalgos directory has been installed, the final step of installation is to set up the necessary node dependencies. In the same command prompt or terminal you just used, type the following:
|
||||
|
||||
```
|
||||
cd Superalgos
|
||||
```
|
||||
|
||||
That should take you inside the Superalgos folder created by the `git clone` command earlier. Now, run the following command:
|
||||
|
||||
```
|
||||
node setup
|
||||
```
|
||||
|
||||
Then wait until you are able to type within the terminal again.
|
||||
|
||||
This command will install and configure all additional dependencies needed by Superalgos. It will also install desktop and start menu shortcuts.
|
||||
|
||||
**NOTE FOR USERS INSTALLING MULTIPLE INSTANCES OF SUPERALGOS ON THE SAME MACHINE:** In order to avoid name conflicts between shortcuts, make sure to rename each Superalgos directory before running `node setup`.
|
||||
|
||||
Congratulations your installation is complete!
|
||||
|
||||
> **The Usage section below explains how to run the app.**
|
||||
|
||||
<hr>
|
||||
|
||||
**DEPENDENCY INSTALLATION FOR RASPBERRY PI USERS**
|
||||
|
||||
As noted above, running `node setup` installs GUI shortcuts by default. To suppress this behavior in headless installations, add the `noShortcuts` flag as follows:
|
||||
|
||||
```
|
||||
node setup noShortcuts
|
||||
```
|
||||
|
||||
<hr>
|
||||
|
||||
**Troubleshooting Dependency Installation**
|
||||
|
||||
If you are having difficulty running the node setup command here are a few common issues that may be getting in the way.
|
||||
|
||||
**1.** Check the version of node and npm you have installed. Make sure that you are running an updated version of node greater than version 12 and npm greater than version 5. You can check which version you have by typing `node -v` and `npm -v` into a command prompt or terminal. If your version numbers are below these, you can update your installation by following the instructions outlined in the "Node JS Installation" step above.
|
||||
|
||||
|
||||
**2.** If you are installing Superalgos in an administratively protected directory you will need to do one of the following:
|
||||
|
||||
- For Windows start your command prompt as an administrator.
|
||||
|
||||
- For Linux and Mac Systems make sure to add the sudo command to node setup. This will look like `sudo node setup`.
|
||||
|
||||
|
||||
**3.** For Windows it is important that you have C:\Windows\System32 added to your global PATH. For instructions on how to do this google "add to the path on Windows 10."
|
||||
|
||||
<hr>
|
||||
|
||||
## 4. Installation Notes
|
||||
|
||||
**A.** You need to make a fork so that you may contribute work. Superalgos is a Community project and you are expected to contribute, like everyone else. You don't need to be a technical person to contribute. Fixing a typo in the docs or translating a paragraph into your native language are valuable contributions too. Superalgos has built-in features that make contributing easy. Help make Superalgos better and Superalgos will better serve you! [Free-riding is not cool](https://en.wikipedia.org/wiki/Free-rider_problem), particularly on free, open-source, Community-driven projects.
|
||||
|
||||
**B.** The software includes an in-app self-update command / feature. It will help you stay up-to-date with the latest version of the software. Updates are on-demand, so don't worry about undesired updates. The project moves very fast and new features become available regularly, particularly if you choose to run the software in the ```develop``` branch (you may switch branches from within the app).
|
||||
|
||||
**C.** It is a good idea to perodically run the `node setup` command to keep the underlying dependencies for your Superalgos installation up to date.
|
||||
|
||||
**D.** Before installing the client on a remote computer in an attempt to access the UI from a different machine, we highly recommend you do a standard installation on your PC / laptop first. Leave your Raspberry Pi or VPS for later, once you have done all available tutorials. This single tip will save you a lot of time: you don't need to add complexity before you learn how to handle the app, and the GUI performs best in a local installation.
|
||||
|
||||
# Usage
|
||||
|
||||
## 1. Run the Client and GUI
|
||||
|
||||
**A.** To run Superalgos, go to the Superalgos directory/folder and run this command:
|
||||
|
||||
```
|
||||
node run
|
||||
```
|
||||
|
||||
The Client will run on your terminal and the GUI will launch on your default browser. If Chrome/Safari is not your default browser, copy the URL, close the browser, open Chrome/Safari, and paste the URL. Be patient... it takes a few seconds to fully load the GUI.
|
||||
|
||||
A Welcome Tutorial pops-up automatically. You must do this Tutorial to finish the setup and to learn the basics. It's the ultimate onboarding experience, superior to all other resources available, including videos and the Docs.
|
||||
|
||||

|
||||
|
||||
If you are running a headless Raspberry Pi (one without a screen) you may need to change directories first and run Superalgos with the `minMemo` and `noBrowser` options.
|
||||
```
|
||||
cd Superalgos
|
||||
```
|
||||
then
|
||||
```
|
||||
node run minMemo noBrowser
|
||||
```
|
||||
|
||||
In addition, you may use any of the automatically installed desktop and start menu shortcuts to launch Superalgos.
|
||||
|
||||
**NOTE:** Shortcuts are not currently supported on Mac. Collaborators are needed to finish this feature.
|
||||
|
||||
**B.** Enable Desktop Shortcut on Ubuntu
|
||||
|
||||
The majority of shortcuts that are automatically installed will work out of the box. Desktop shortcuts on Ubuntu, however, require a few additional steps to set up.
|
||||
|
||||
First, desktop icons need to be enabled within the Tweaks app.
|
||||
* Check if Tweaks is installed.
|
||||
* If not go to Ubuntu Software.
|
||||
* Install Tweaks.
|
||||
* Open Tweaks.
|
||||
* Under extensions turn on Desktop Icons
|
||||
|
||||

|
||||
|
||||
**TIP:** If you do not see the desktop shortcut appear right away you may need to restart your computer.
|
||||
|
||||
Finally, you will need to enable the desktop shortcut.
|
||||
* Right click Superalgos.desktop and select Allow Launching.
|
||||
|
||||

|
||||
|
||||
Now both launcher and desktop shortcuts will launch Superalgos like any other program on your computer.
|
||||
|
||||
## 3. Usage Notes
|
||||
|
||||
We are testing the UI on Google Chrome and Safari on macOS only. It may work on other browsers as well — or not. If you are running on a different browser and ever need support, make sure you mention that fact upfront, or even better, try on Chrome/Safari first.
|
||||
|
||||
**TIP:** If your computer has 8 GB of RAM or less, use ```node run minMemo``` to run the system with minimal RAM requirements.
|
||||
|
||||
# Running Superalgos on a Headless Linux Server as a Daemon
|
||||
|
||||
If you're running Superalgos on a headless linux server like a Raspberry Pi, you might want to run it as a daemon so it isn't attached to your current login session. The easiest, most standard way to go about this is probably using `systemd`. Most linux distributions use it as default init system/service manager.
|
||||
|
||||
## Using `systemd`
|
||||
|
||||
Create a `superalgos.service` file looking like this (change `<user>` to your user name and `/path/to/Superalgos` to your Superalgos folder, for instance `/home/John/Superalgos`):
|
||||
```
|
||||
[Unit]
|
||||
Description=Superalgos client
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=<user>
|
||||
WorkingDirectory=/path/to/Superalgos
|
||||
ExecStart=/usr/bin/node run minMemo noBrowser
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
```
|
||||
There is no need to run Superalgos as root so we're running it as a user. The `minMemo` option assumes you're running on a small machine like a Raspberry Pi, while `noBrowser` makes sense for running daemonized.
|
||||
|
||||
Now, as root (or using `sudo`), put the file `superalgos.service` you just created in `/etc/systemd/system/` and issue the command
|
||||
```
|
||||
systemctl enable superalgos
|
||||
```
|
||||
This will install the service so that Superalgos is started on boot. To start it manually, do (again as root or with `sudo`)
|
||||
```
|
||||
systemctl start superalgos
|
||||
```
|
||||
|
||||
To see the output of Superalgos, use
|
||||
```
|
||||
journalctl -u superalgos
|
||||
```
|
||||
or to follow the output,
|
||||
```
|
||||
journalctl -u superalgos -f
|
||||
```
|
||||
|
||||
# Uninstall
|
||||
|
||||
Superalgos writes nothing outside of the ```Superalgos``` folder other than shortcut files. To uninstall the software, follow these steps:
|
||||
|
||||
Open a terminal or command prompt and navigate to your main Superalgos directory and type the following command:
|
||||
```
|
||||
node uninstall
|
||||
```
|
||||
This will remove any shortcut files that have been installed.
|
||||
|
||||
Then simply delete the `Superalgos` folder. There will be nothing left on your computor.
|
||||
|
||||
# Welcome Tutorial
|
||||
|
||||
Once the app finishes loading, an interactive tutorial takes you by the hand and walks you all around the system while you learn the basic skills required to use the interface, mine data, backtest strategies, and even run a live trading session. It is highly recommended you follow the tutorial until the end, as it is carefully crafted to make your onboarding as easy as possible. Tutorials are the absolute best way to tackle the learning curve. You should do all tutorials before you start exploring other avenues on your own.
|
||||
|
||||

|
||||
|
||||
**NOTE:** The tutorial uses Binance or Binance US as the exchange of choice. If you don't have an account with Binance or Binance US, you will still be able to follow 100% of the tutorial. When you get to the live trading section, keep going even if you don't intend to run the session. You may learn how to work with other exchanges later on.
|
||||
|
||||
# Docker Deployments
|
||||
|
||||
Docker container images can be found at https://github.com/users/Superalgos/packages/container/package/superalgos
|
||||
|
||||
If you wish to run Superalgos over docker platform, follow these steps.
|
||||
|
||||
**Note:** This has not been extensively tested yet. If you run into troubles, please contact us at the [Superalgos Support Group](https://t.me/superalgossupport).
|
||||
|
||||
## 1. Install Docker
|
||||
|
||||
Follow the link to [install docker](https://docs.docker.com/engine/install/).
|
||||
|
||||
## 2. Run
|
||||
|
||||
|
||||
### Option A. Using pre-built container
|
||||
|
||||
You will need to create local storage directories beforehand, by example with `mkdir Data-Storage Log-Files My-Workspaces`
|
||||
|
||||
```
|
||||
docker run \
|
||||
-d \
|
||||
--rm \
|
||||
--name superalgos \
|
||||
-p 18041:18041 \
|
||||
-p 34248:34248 \
|
||||
-v $(pwd)/Data-Storage:/app/Data-Storage \
|
||||
-v $(pwd)/Log-Files:/app/Log-Files \
|
||||
-v $(pwd)/My-Workspaces:/app/My-Workspaces \
|
||||
ghcr.io/superalgos/superalgos:latest
|
||||
```
|
||||
|
||||
Now you can access the Superalgos UI at http://127.0.0.1:34248
|
||||
|
||||
To see console logs you can use `docker logs superalgos -f`
|
||||
|
||||
When you're done just exec `docker kill superalgos`
|
||||
|
||||
### Option B. Build container locally using docker-compose
|
||||
|
||||
Follow the link to [install docker-compose](https://docs.docker.com/compose/install/)
|
||||
|
||||
Run `docker-compose -f Docker/docker-compose.yml up`.
|
||||
|
||||
## Configure the Container Environment
|
||||
|
||||
### Available image tags
|
||||
|
||||
To avoid breaking changes, the `shasum hash` and the `release` tags are the best to use. These will generally ensure you are always running the same code. The other tags will change which code they are pointing to more frequently and without notice.
|
||||
|
||||
- `latest` : the absolute latest build
|
||||
- `master` : the latest master branch build
|
||||
- `develop` : the latest develop branch build
|
||||
- `<shasum hash>` : a specific git commit hash
|
||||
- `<release>` : corresponds with a Github Release (git tag), i.e. `beta-10`
|
||||
|
||||
### Environment variables
|
||||
|
||||
`PUID` and `GUID` environment variables can be used to help avoid permissions issues in the mounted volumes between the container environment and the local OS environment. The default `PUID` and `GUID` is `1000`. You can view the current user's PUID and GUID with the `id` command.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
Some users have reported the Docker installation was not working, and the root cause was that the ad blocker was blocking the scripts to run.
|
||||
+116
@@ -0,0 +1,116 @@
|
||||
exports.newMultiProject = function () {
|
||||
|
||||
let thisObject = {
|
||||
initialize: initialize
|
||||
}
|
||||
|
||||
return thisObject;
|
||||
|
||||
function initialize(rootObject, rootObjectName) {
|
||||
/*
|
||||
Here we will setup the rootObject object, with all the
|
||||
projects and modules that will have inside.
|
||||
*/
|
||||
rootObject.projects = {}
|
||||
|
||||
for (let i = 0; i < PROJECTS_SCHEMA.length; i++) {
|
||||
let projectDefinition = PROJECTS_SCHEMA[i]
|
||||
global[rootObjectName].projects[projectDefinition.propertyName] = {}
|
||||
let projectInstance = global[rootObjectName].projects[projectDefinition.propertyName]
|
||||
|
||||
projectInstance.utilities = {}
|
||||
projectInstance.globals = {}
|
||||
projectInstance.functionLibraries = {}
|
||||
projectInstance.modules = {}
|
||||
projectInstance.taskModules = {}
|
||||
projectInstance.processModules = {}
|
||||
projectInstance.botModules = {}
|
||||
|
||||
if (projectDefinition[rootObjectName] === undefined) { continue }
|
||||
|
||||
/* Set up Utilities of this Project */
|
||||
if (projectDefinition[rootObjectName].utilities !== undefined) {
|
||||
for (let j = 0; j < projectDefinition[rootObjectName].utilities.length; j++) {
|
||||
let utilityDefinition = projectDefinition[rootObjectName].utilities[j]
|
||||
let path = global.env.PATH_TO_PROJECTS_REQUIRED + '/' + projectDefinition.name + '/' + rootObjectName + '/' + 'Utilities' + '/' + utilityDefinition.fileName
|
||||
|
||||
let requiredObject = require(path)
|
||||
let requiredFunction = requiredObject[utilityDefinition.functionName]
|
||||
projectInstance.utilities[utilityDefinition.propertyName] = requiredFunction.call()
|
||||
}
|
||||
}
|
||||
|
||||
/* Set up Globals of this Project */
|
||||
if (projectDefinition[rootObjectName].globals !== undefined) {
|
||||
for (let j = 0; j < projectDefinition[rootObjectName].globals.length; j++) {
|
||||
let globalDefinition = projectDefinition[rootObjectName].globals[j]
|
||||
let path = global.env.PATH_TO_PROJECTS_REQUIRED + '/' + projectDefinition.name + '/' + rootObjectName + '/' + 'Globals' + '/' + globalDefinition.fileName
|
||||
|
||||
let requiredObject = require(path)
|
||||
let requiredFunction = requiredObject[globalDefinition.functionName]
|
||||
projectInstance.globals[globalDefinition.propertyName] = requiredFunction.call()
|
||||
}
|
||||
}
|
||||
|
||||
/* Set up Function Libraries of this Project */
|
||||
if (projectDefinition[rootObjectName].functionLibraries !== undefined) {
|
||||
for (let j = 0; j < projectDefinition[rootObjectName].functionLibraries.length; j++) {
|
||||
let functionLibraryDefinition = projectDefinition[rootObjectName].functionLibraries[j]
|
||||
let path = global.env.PATH_TO_PROJECTS_REQUIRED + '/' + projectDefinition.name + '/' + rootObjectName + '/' + 'Function-Libraries' + '/' + functionLibraryDefinition.fileName
|
||||
|
||||
let requiredObject = require(path)
|
||||
let requiredFunction = requiredObject[functionLibraryDefinition.functionName]
|
||||
projectInstance.functionLibraries[functionLibraryDefinition.propertyName] = requiredFunction.call()
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
From here we will require and get the modules, but without instantiation thisObject.
|
||||
*/
|
||||
|
||||
/* Set up Modules for this Project */
|
||||
if (projectDefinition[rootObjectName].modules !== undefined) {
|
||||
for (let j = 0; j < projectDefinition[rootObjectName].modules.length; j++) {
|
||||
let taskModuleDefinition = projectDefinition[rootObjectName].modules[j]
|
||||
let path = global.env.PATH_TO_PROJECTS_REQUIRED + '/' + projectDefinition.name + '/' + rootObjectName + '/' + 'Modules' + '/' + taskModuleDefinition.fileName
|
||||
|
||||
let requiredObject = require(path)
|
||||
projectInstance.modules[taskModuleDefinition.propertyName] = requiredObject
|
||||
}
|
||||
}
|
||||
|
||||
/* Set up Task Modules for this Project */
|
||||
if (projectDefinition[rootObjectName].taskModules !== undefined) {
|
||||
for (let j = 0; j < projectDefinition[rootObjectName].taskModules.length; j++) {
|
||||
let taskModuleDefinition = projectDefinition[rootObjectName].taskModules[j]
|
||||
let path = global.env.PATH_TO_PROJECTS_REQUIRED + '/' + projectDefinition.name + '/' + rootObjectName + '/' + 'Task-Modules' + '/' + taskModuleDefinition.fileName
|
||||
|
||||
let requiredObject = require(path)
|
||||
projectInstance.taskModules[taskModuleDefinition.propertyName] = requiredObject
|
||||
}
|
||||
}
|
||||
|
||||
/* Set up Process Modules for this Project */
|
||||
if (projectDefinition[rootObjectName].processModules !== undefined) {
|
||||
for (let j = 0; j < projectDefinition[rootObjectName].processModules.length; j++) {
|
||||
let processModuleDefinition = projectDefinition[rootObjectName].processModules[j]
|
||||
let path = global.env.PATH_TO_PROJECTS_REQUIRED + '/' + projectDefinition.name + '/' + rootObjectName + '/' + 'Process-Modules' + '/' + processModuleDefinition.fileName
|
||||
|
||||
let requiredObject = require(path)
|
||||
projectInstance.processModules[processModuleDefinition.propertyName] = requiredObject
|
||||
}
|
||||
}
|
||||
|
||||
/* Set up Bot Modules for this Project */
|
||||
if (projectDefinition[rootObjectName].botModules !== undefined) {
|
||||
for (let j = 0; j < projectDefinition[rootObjectName].botModules.length; j++) {
|
||||
let botModuleDefinition = projectDefinition[rootObjectName].botModules[j]
|
||||
let path = global.env.PATH_TO_PROJECTS_REQUIRED + '/' + projectDefinition.name + '/' + rootObjectName + '/' + 'Bot-Modules' + '/' + botModuleDefinition.folderName + '/' + botModuleDefinition.fileName
|
||||
|
||||
let requiredObject = require(path)
|
||||
projectInstance.botModules[botModuleDefinition.propertyName] = requiredObject
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"folders": [
|
||||
{
|
||||
"path": "C:\\Superalgos\\Network"
|
||||
},
|
||||
{
|
||||
"path": "C:\\Superalgos\\Projects\\Network"
|
||||
},
|
||||
{
|
||||
"path": "C:\\Superalgos\\Projects\\Social-Trading"
|
||||
}
|
||||
],
|
||||
"settings": {}
|
||||
}
|
||||
Vendored
+16
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"files.exclude": {
|
||||
"**/Data-Storage": true,
|
||||
"**/Documentation": true,
|
||||
"**/Log-Files": true,
|
||||
"**/node_modules": true,
|
||||
"**/Deprecated-Code": true
|
||||
},
|
||||
"search.exclude": {
|
||||
"**/Data-Storage": true,
|
||||
"**/Documentation": true,
|
||||
"**/Log-Files": true,
|
||||
"**/Deprecated-Code": true
|
||||
},
|
||||
"search.maintainFileSearchCache": true
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
exports.newNetworkNode = function newNetworkNode() {
|
||||
|
||||
let thisObject = {
|
||||
run: run
|
||||
}
|
||||
|
||||
return thisObject
|
||||
|
||||
function run() {
|
||||
/*
|
||||
Let's start the Network Interfaces
|
||||
*/
|
||||
NT.webSocketsInterface = NT.projects.network.modules.webSocketsInterface.newNetworkModulesWebSocketsInterface()
|
||||
NT.webSocketsInterface.initialize()
|
||||
|
||||
start()
|
||||
|
||||
async function start() {
|
||||
let socialGraphService = NT.projects.socialTrading.modules.socialGraph.newSocialGraph()
|
||||
await socialGraphService.initialize()
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,7 @@ exports.newFoundationsUtilitiesWebAccess = function () {
|
||||
async function fetchAPIDataFile(url) {
|
||||
let promise = new Promise((resolve, reject) => {
|
||||
|
||||
const fetch = CL.nodeModules.nodeFetch
|
||||
const fetch = SA.nodeModules.nodeFetch
|
||||
/*
|
||||
This is how we call the API.
|
||||
*/
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
@@ -1 +1 @@
|
||||
{"type":"Data Mine","name":"Delta","config":"{\n \"codeName\": \"Delta\"\n}","project":"Foundations","sensorBots":[],"indicatorBots":[{"type":"Indicator Bot","name":"Relative Strenght Index - Wilder Method (RSI-W)","config":"{\n \"codeName\": \"RSI-W\"\n}","project":"Foundations","processes":[{"type":"Process Definition","name":"Multi-Time-Frame-Market","config":"{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"description\": \"Calculates Wilder RSI.\",\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Time-Frame-Market\"\n }\n}","project":"Foundations","processOutput":{"type":"Process Output","name":"New Process Output","project":"Foundations","outputDatasets":[{"type":"Output Dataset","name":"Multi-Time-Frame-Market RSI-W14","project":"Foundations","id":"75881553-ec60-4954-9404-052ba11904f4","savedPayload":{"position":{"x":19646.18251638588,"y":17789.2053813897},"targetPosition":{"x":19675.299658959913,"y":17897.87203684722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"a94722c3-a453-4f46-931f-aeb244e7cb66"}}}],"outputDatasetFolders":[],"id":"ffb59a7e-565a-4588-bd44-999a7cb66122","savedPayload":{"position":{"x":19675.299658959913,"y":17897.87203684722},"targetPosition":{"x":19704.416801533946,"y":18006.53869230474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Foundations","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Time-Frame-Market","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Foundations","id":"b0af9801-ba4e-4bfd-a605-98d9ac121b5f","savedPayload":{"position":{"x":19650.151086682014,"y":17594.3496655382},"targetPosition":{"x":19762.651086682014,"y":17789.2053813897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}},{"type":"Status Dependency","name":"Relative Strenght Index - Wilder Method (RSI-W) Multi-Time-Frame-Market","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Foundations","id":"02d64b4a-7c3c-4c89-918d-b3697b5955b2","savedPayload":{"position":{"x":19820.88537183008,"y":17571.87207047466},"targetPosition":{"x":19762.651086682014,"y":17789.2053813897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2b961dac-9f41-4eed-a495-4e55f26714c3"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Time-Frame-Market","project":"Foundations","id":"25315413-2e01-4a7d-83bc-1257d43f8fe6","savedPayload":{"position":{"x":19957.506802533513,"y":17676.7053813897},"targetPosition":{"x":19762.651086682014,"y":17789.2053813897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"b14516a1-e5cc-48f8-ab0f-0e46faf6c41c","savedPayload":{"position":{"x":19762.651086682014,"y":17789.2053813897},"targetPosition":{"x":19704.416801533946,"y":18006.53869230474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Foundations","id":"2b961dac-9f41-4eed-a495-4e55f26714c3","savedPayload":{"position":{"x":19863.51582730092,"y":17847.439666537768},"targetPosition":{"x":19704.416801533946,"y":18006.53869230474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Time-Frame-Market","project":"Foundations","id":"c1598823-e0b3-4036-8ad6-669ae0e3f638","savedPayload":{"position":{"x":19921.750112448986,"y":17948.304407156673},"targetPosition":{"x":19704.416801533946,"y":18006.53869230474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution FinisheLine truncated
|
||||
{"type":"Data Mine","name":"Delta","config":"{\n \"codeName\": \"Delta\"\n}","project":"Foundations","sensorBots":[],"indicatorBots":[{"type":"Indicator Bot","name":"Relative Strength Index - Wilder Method (RSI-W)","config":"{\n \"codeName\": \"RSI-W\"\n}","project":"Foundations","processes":[{"type":"Process Definition","name":"Multi-Time-Frame-Market","config":"{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"description\": \"Calculates Wilder RSI.\",\n \"deadWaitTime\": 0,\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"sleepWaitTime\": 3600000,\n \"comaWaitTime\": 86400000,\n \"framework\": {\n \"name\": \"Multi-Time-Frame-Market\"\n }\n}","project":"Foundations","processOutput":{"type":"Process Output","name":"New Process Output","project":"Foundations","outputDatasets":[{"type":"Output Dataset","name":"Multi-Time-Frame-Market RSI-W14","project":"Foundations","id":"75881553-ec60-4954-9404-052ba11904f4","savedPayload":{"position":{"x":19646.18251638588,"y":17789.2053813897},"targetPosition":{"x":19675.299658959913,"y":17897.87203684722},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"a94722c3-a453-4f46-931f-aeb244e7cb66"}}}],"outputDatasetFolders":[],"id":"ffb59a7e-565a-4588-bd44-999a7cb66122","savedPayload":{"position":{"x":19675.299658959913,"y":17897.87203684722},"targetPosition":{"x":19704.416801533946,"y":18006.53869230474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":1,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Foundations","statusDependencies":[{"type":"Status Dependency","name":"Candles Volumes Multi-Time-Frame-Market","config":"{\n \"mainUtility\": \"Market Ending Point\"\n}","project":"Foundations","id":"b0af9801-ba4e-4bfd-a605-98d9ac121b5f","savedPayload":{"position":{"x":19650.151086682014,"y":17594.3496655382},"targetPosition":{"x":19762.651086682014,"y":17789.2053813897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}},{"type":"Status Dependency","name":"Relative Strength Index - Wilder Method (RSI-W) Multi-Time-Frame-Market","config":"{\n \"mainUtility\": \"Self Reference\"\n}","project":"Foundations","id":"02d64b4a-7c3c-4c89-918d-b3697b5955b2","savedPayload":{"position":{"x":19820.88537183008,"y":17571.87207047466},"targetPosition":{"x":19762.651086682014,"y":17789.2053813897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"2b961dac-9f41-4eed-a495-4e55f26714c3"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Time-Frame-Market","project":"Foundations","id":"25315413-2e01-4a7d-83bc-1257d43f8fe6","savedPayload":{"position":{"x":19957.506802533513,"y":17676.7053813897},"targetPosition":{"x":19762.651086682014,"y":17789.2053813897},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"b14516a1-e5cc-48f8-ab0f-0e46faf6c41c","savedPayload":{"position":{"x":19762.651086682014,"y":17789.2053813897},"targetPosition":{"x":19704.416801533946,"y":18006.53869230474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Foundations","id":"2b961dac-9f41-4eed-a495-4e55f26714c3","savedPayload":{"position":{"x":19863.51582730092,"y":17847.439666537768},"targetPosition":{"x":19704.416801533946,"y":18006.53869230474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Time-Frame-Market","project":"Foundations","id":"c1598823-e0b3-4036-8ad6-669ae0e3f638","savedPayload":{"position":{"x":19921.750112448986,"y":17948.304407156673},"targetPosition":{"x":19704.416801533946,"y":18006.53869230474},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution FinisheLine truncated
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -1456,7 +1456,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Market",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\"\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "24e17411-dccd-44b9-864d-ee83550186a8",
|
||||
"savedPayload": {
|
||||
@@ -1484,7 +1484,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "f6a486fc-4b6d-4a18-8059-8d48606686fd",
|
||||
"savedPayload": {
|
||||
@@ -2064,7 +2064,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Market",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\"\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "d435f8db-8340-4e1a-b133-3f0042fc1e07",
|
||||
"savedPayload": {
|
||||
@@ -2092,7 +2092,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "971a060c-3d24-412a-bf75-7f0fa1fabcdd",
|
||||
"savedPayload": {
|
||||
@@ -3111,7 +3111,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Market",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\"\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "b2698fb2-3dee-406f-9bd6-461771adb181",
|
||||
"savedPayload": {
|
||||
@@ -3138,8 +3138,8 @@
|
||||
},
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "3fe1f916-855f-47bc-9aa8-e0886622a572",
|
||||
"savedPayload": {
|
||||
@@ -3773,7 +3773,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Market",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\"\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "bda8eb74-bd2b-42d8-b008-03caa80d16d6",
|
||||
"savedPayload": {
|
||||
@@ -3800,8 +3800,8 @@
|
||||
},
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "87bf9691-6101-4040-8b27-6540b188fa1b",
|
||||
"savedPayload": {
|
||||
@@ -4820,7 +4820,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Market",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\"\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "59b1356d-d6fa-48c1-8fce-7f401cc9e35c",
|
||||
"savedPayload": {
|
||||
@@ -4847,8 +4847,8 @@
|
||||
},
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "96eac3f2-a173-4696-80d6-4866ac70fae3",
|
||||
"savedPayload": {
|
||||
@@ -5867,7 +5867,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Market",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\"\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "7a5661e9-3a10-409f-b3f3-8f24e7a95429",
|
||||
"savedPayload": {
|
||||
@@ -5894,8 +5894,8 @@
|
||||
},
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "88bd54f9-1bd3-4d3b-a21e-2ae9f782c1d2",
|
||||
"savedPayload": {
|
||||
@@ -6832,7 +6832,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Market",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\"\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "b3baf8e8-71e8-47a7-8416-badf212e875d",
|
||||
"savedPayload": {
|
||||
@@ -6859,8 +6859,8 @@
|
||||
},
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "40f46850-0aa7-4bf9-9afa-4c4319d92fe6",
|
||||
"savedPayload": {
|
||||
@@ -9088,7 +9088,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Market",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\"\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "26d3e757-9a6e-4807-b8a8-652cf276affa",
|
||||
"savedPayload": {
|
||||
@@ -9115,8 +9115,8 @@
|
||||
},
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "78d41812-18af-4c1f-9968-1515e52203ab",
|
||||
"savedPayload": {
|
||||
@@ -9696,7 +9696,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Market",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [\n \"24-hs\",\n \"12-hs\",\n \"08-hs\",\n \"06-hs\",\n \"04-hs\",\n \"03-hs\",\n \"02-hs\",\n \"01-hs\"\n ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\"\n}",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "86c91781-e7fd-4386-94e4-3fbe975e6828",
|
||||
"savedPayload": {
|
||||
@@ -9724,7 +9724,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [\n \"45-min\",\n \"40-min\",\n \"30-min\",\n \"20-min\",\n \"15-min\",\n \"10-min\",\n \"05-min\",\n \"04-min\",\n \"03-min\",\n \"02-min\",\n \"01-min\"\n ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n}",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "d5e4394d-53f1-4ad6-88b4-573106658488",
|
||||
"savedPayload": {
|
||||
@@ -10716,7 +10716,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Market",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\"\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "2523677a-0ecc-4cc0-99e5-73fd37c25c51",
|
||||
"savedPayload": {
|
||||
@@ -10743,8 +10743,8 @@
|
||||
},
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "81365e5b-be43-4260-b014-150d3f6ee0f7",
|
||||
"savedPayload": {
|
||||
@@ -11736,7 +11736,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Market",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\"\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "098ad037-e7fb-4c55-938e-f63f79479848",
|
||||
"savedPayload": {
|
||||
@@ -11763,8 +11763,8 @@
|
||||
},
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "9934146b-c25b-4c8f-bc83-f5bbe212b48d",
|
||||
"savedPayload": {
|
||||
@@ -12783,7 +12783,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Market",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\"\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "a1419254-9026-4a52-8bd1-ca626af821b7",
|
||||
"savedPayload": {
|
||||
@@ -12810,8 +12810,8 @@
|
||||
},
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "1aa7b3bf-5c36-4a3b-9e8d-335153025634",
|
||||
"savedPayload": {
|
||||
@@ -13445,7 +13445,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Market",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\"\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "1d0a210c-3e18-4880-a465-ff12f28b8e15",
|
||||
"savedPayload": {
|
||||
@@ -13472,8 +13472,8 @@
|
||||
},
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "6728ff43-3ba4-448e-8ba7-2403732961b1",
|
||||
"savedPayload": {
|
||||
@@ -14410,7 +14410,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Market",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\"\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "0f1d28de-9c7d-40d9-907a-cbbfbaa1b3b2",
|
||||
"savedPayload": {
|
||||
@@ -14437,8 +14437,8 @@
|
||||
},
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "28f0f7e8-de79-4e87-b46c-6818784ff3b2",
|
||||
"savedPayload": {
|
||||
@@ -16665,7 +16665,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Market",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\"\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "055e39d4-6317-4018-a821-d5ab90aa5a79",
|
||||
"savedPayload": {
|
||||
@@ -16692,8 +16692,8 @@
|
||||
},
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "0856af01-bb1d-4dd5-8e4b-6cf3ab90678b",
|
||||
"savedPayload": {
|
||||
@@ -17327,7 +17327,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Market",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\"\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "afb3fbdc-8f38-49ff-acb5-f127c98ddb12",
|
||||
"savedPayload": {
|
||||
@@ -17355,7 +17355,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "1c7fd7e8-4b5e-4a34-80b2-99b99cc4fd4f",
|
||||
"savedPayload": {
|
||||
@@ -17989,7 +17989,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Market",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\"\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "0e28708b-348e-4b29-b82c-c17ddf9f23f1",
|
||||
"savedPayload": {
|
||||
@@ -18017,7 +18017,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "2690a9f4-b1d5-41ac-994c-3d44efbf0ea6",
|
||||
"savedPayload": {
|
||||
@@ -18651,7 +18651,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Market",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\"\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "23421928-fb4b-40ad-ba05-29c0dcd52c47",
|
||||
"savedPayload": {
|
||||
@@ -18679,7 +18679,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "324cb3b8-b070-4ccc-a3ae-78da3b14626a",
|
||||
"savedPayload": {
|
||||
@@ -20298,7 +20298,7 @@
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Market",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\"\n }",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"type\": \"Market Files\",\n \"validTimeFrames\": [ \"24-hs\", \"12-hs\", \"08-hs\", \"06-hs\", \"04-hs\", \"03-hs\", \"02-hs\", \"01-hs\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame\",\n \"fileName\": \"Data.json\",\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "58672420-221d-489d-bfcd-6fc94a08ae33",
|
||||
"savedPayload": {
|
||||
@@ -20325,8 +20325,8 @@
|
||||
},
|
||||
{
|
||||
"type": "Dataset Definition",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n }\n }",
|
||||
"name": "Multi-Time-Frame-Daily",
|
||||
"config": "{\n \"codeName\": \"Multi-Time-Frame-Daily\",\n \"type\": \"Daily Files\",\n \"validTimeFrames\": [ \"45-min\", \"40-min\", \"30-min\", \"20-min\", \"15-min\", \"10-min\", \"05-min\", \"04-min\", \"03-min\", \"02-min\", \"01-min\" ],\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset/@TimeFrame/@Year/@Month/@Day\",\n \"fileName\": \"Data.json\",\n \"dataRange\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Data.Range.json\"\n },\n \"timeFrames\": {\n \"filePath\": \"Project/@Project/@MineType/@Mine/@Bot/@Exchange/@BaseAsset-@QuotedAsset/Output/@Product/@Dataset\",\n \"fileName\": \"Time.Frames.json\"\n }\n }",
|
||||
"project": "Foundations",
|
||||
"id": "7e1a5932-d556-44ff-8c6d-f82b568ed845",
|
||||
"savedPayload": {
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"type":"Data Mine","name":"Zeus","config":"{ \n\"codeName\": \"Zeus\"\n}","project":"Foundations","sensorBots":[],"indicatorBots":[{"type":"Indicator Bot","name":"Super Trend","config":"{ \n\"codeName\": \"Super-Trend\"\n}","project":"Foundations","processes":[{"type":"Process Definition","name":"Multi-Time-Frame-Market","config":" {\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"framework\": {\n \"name\": \"Multi-Time-Frame-Market\"\n }\n }","project":"Foundations","processOutput":{"type":"Process Output","name":"New Process Output","project":"Foundations","outputDatasets":[{"type":"Output Dataset","name":"Multi-Time-Frame-Market Super Trend","project":"Foundations","id":"2412939e-1585-47f9-8d09-7ea8dd7c8bf0","savedPayload":{"position":{"x":21786.83642206419,"y":17775.938049371594},"targetPosition":{"x":21825.659278829567,"y":17920.826923314955},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"7c8e7a6f-99c8-4d90-9f44-e3e9e909eb88"}}}],"outputDatasetFolders":[],"id":"74212c63-4a69-407d-80ec-d39ee2d8df74","savedPayload":{"position":{"x":21825.659278829567,"y":17920.826923314955},"targetPosition":{"x":21864.482135594946,"y":18065.715797258315},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Foundations","statusDependencies":[{"type":"Status Dependency","name":"Super Trend Multi-Time-Frame-Market","config":"{ \n\"mainUtility\": \"Self Reference\"\n}","project":"Foundations","id":"5a35d0d1-cfed-4893-84ab-344a77c7d252","savedPayload":{"position":{"x":21792.127849125704,"y":17516.13042823626},"targetPosition":{"x":21942.127849125704,"y":17775.938049371594},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"25f05344-3e7f-4d5f-ab1c-d72689a85764"}}},{"type":"Status Dependency","name":"Candles Volumes Multi-Time-Frame-Market","config":"{ \n\"mainUtility\": \"Market Ending Point\"\n}","project":"Foundations","id":"2a42dd15-1e04-4826-bd5f-85d95fbae135","savedPayload":{"position":{"x":22019.77356265646,"y":17486.160301484873},"targetPosition":{"x":21942.127849125704,"y":17775.938049371594},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Time-Frame-Market","project":"Foundations","id":"88a45f27-a0b8-4234-b7aa-f139400305db","savedPayload":{"position":{"x":22201.935470261036,"y":17625.938049371594},"targetPosition":{"x":21942.127849125704,"y":17775.938049371594},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"eef38121-80a2-4471-b909-24acdc4d213a","savedPayload":{"position":{"x":21942.127849125704,"y":17775.938049371594},"targetPosition":{"x":21864.482135594946,"y":18065.715797258315},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Foundations","id":"25f05344-3e7f-4d5f-ab1c-d72689a85764","savedPayload":{"position":{"x":22076.61416995091,"y":17853.58376290235},"targetPosition":{"x":21864.482135594946,"y":18065.715797258315},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"Candles Volumes Multi-Time-Frame-Market","project":"Foundations","id":"d9b0ffbd-c1bd-4e43-a00d-04a6b6fb470b","savedPayload":{"position":{"x":22154.259883481667,"y":17988.070083727558},"targetPosition":{"x":21864.482135594946,"y":18065.715797258315},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","projeLine truncated
|
||||
{"type":"Data Mine","name":"Zeus","config":"{ \n\"codeName\": \"Zeus\"\n}","project":"Superalgos","sensorBots":[],"apiDataFetcherBots":[],"indicatorBots":[{"type":"Indicator Bot","name":"Super Trend","config":"{ \n\"codeName\": \"Super-Trend\"\n}","project":"Superalgos","processes":[{"type":"Process Definition","name":"Multi-Time-Frame-Market","config":" {\n \"codeName\": \"Multi-Time-Frame-Market\",\n \"normalWaitTime\": 0,\n \"retryWaitTime\": 10000,\n \"framework\": {\n \"name\": \"Multi-Time-Frame-Market\"\n }\n }","project":"Superalgos","processOutput":{"type":"Process Output","name":"New Process Output","project":"Superalgos","outputDatasets":[{"type":"Output Dataset","name":"Multi-Time-Frame-Market Super Trend","project":"Superalgos","id":"2412939e-1585-47f9-8d09-7ea8dd7c8bf0","savedPayload":{"position":{"x":34664.87658172835,"y":17409.843880743556},"targetPosition":{"x":34703.69943849373,"y":17554.732754686916},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":1,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"7c8e7a6f-99c8-4d90-9f44-e3e9e909eb88"}}}],"outputDatasetFolders":[],"id":"74212c63-4a69-407d-80ec-d39ee2d8df74","savedPayload":{"position":{"x":34703.69943849373,"y":17554.732754686916},"targetPosition":{"x":34742.52229525911,"y":17699.621628630277},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":2,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"processDependencies":{"type":"Process Dependencies","name":"New Process Dependencies","project":"Superalgos","statusDependencies":[{"type":"Status Dependency","name":"","config":"{ \n\"mainUtility\": \"Self Reference\"\n}","project":"Superalgos","id":"5a35d0d1-cfed-4893-84ab-344a77c7d252","savedPayload":{"position":{"x":34670.168008789864,"y":17150.036259608223},"targetPosition":{"x":34820.168008789864,"y":17409.843880743556},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"25f05344-3e7f-4d5f-ab1c-d72689a85764"}}},{"type":"Status Dependency","name":"","config":"{ \n\"mainUtility\": \"Market Ending Point\"\n}","project":"Superalgos","id":"2a42dd15-1e04-4826-bd5f-85d95fbae135","savedPayload":{"position":{"x":34897.81372232062,"y":17120.066132856835},"targetPosition":{"x":34820.168008789864,"y":17409.843880743556},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Status Report","name":"New Status Report","id":"a0a61ba9-91cb-4ec7-92fe-134ff079de2d"}}}],"dataDependencies":[{"type":"Data Dependency","name":"Candles Multi-Time-Frame-Market","project":"Superalgos","id":"88a45f27-a0b8-4234-b7aa-f139400305db","savedPayload":{"position":{"x":35079.9756299252,"y":17259.843880743556},"targetPosition":{"x":34820.168008789864,"y":17409.843880743556},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Dataset Definition","name":"Multi-Time-Frame-Market","id":"2b03494a-67d6-47f1-89b6-53fc4c9116a8"}}}],"dataMineDataDependencies":[],"id":"eef38121-80a2-4471-b909-24acdc4d213a","savedPayload":{"position":{"x":34820.168008789864,"y":17409.843880743556},"targetPosition":{"x":34742.52229525911,"y":17699.621628630277},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{"isRunning":false}}},"statusReport":{"type":"Status Report","name":"New Status Report","project":"Superalgos","id":"25f05344-3e7f-4d5f-ab1c-d72689a85764","savedPayload":{"position":{"x":34954.65432961507,"y":17487.489594274313},"targetPosition":{"x":34742.52229525911,"y":17699.621628630277},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{}}},"executionStartedEvent":{"type":"Execution Started Event","name":"","project":"Superalgos","id":"d9b0ffbd-c1bd-4e43-a00d-04a6b6fb470b","savedPayload":{"position":{"x":35032.30004314583,"y":17621.97591509952},"targetPosition":{"x":34742.52229525911,"y":17699.621628630277},"floatingObject":{"isPinned":false,"isFrozen":false,"isCollapsed":false,"angleToParent":2,"distanceToParent":3,"arrangementStyle":0},"uiObject":{},"referenceParent":{"type":"Execution Finished Event","name":"New Execution Finished Event","id":"1824fa00-dd30-4cdc-acc0-01c2f29056c5"}}},"executionFinishedEvent":{"type":"Execution Finished Event","name":"New Execution Finished Event","project":"Superalgos","id":"d405bfe9-74f9-4419-8288-94229c9813a6","savedPayload":{"position":{"x":35032.300043145Line truncated
|
||||
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
File diff suppressed because it is too large.
Load diff
@@ -0,0 +1,251 @@
|
||||
{
|
||||
"type": "Tutorial",
|
||||
"name": "Governance Program Walk Through Tutorial",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"Programs\\\\financial-programs\",\n \"project\": \"Governance\"\n },\n \"position\": \"Center\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Into the Thick of It\"\n },\n \"controlDocs\": {\n \"panel\": \"\",\n \"closeTutorialEditor\": false,\n \"page\": {\n \"project\": \"Foundations\",\n \"category\": \"\",\n \"type\": \"\"\n }\n }\n}",
|
||||
"project": "Education",
|
||||
"tutorialSteps": [
|
||||
{
|
||||
"type": "Tutorial Step",
|
||||
"name": "Refer a Friend",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"Programs\\\\referral-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Refer a Friend\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Topic\",\n \"type\": \"Referral Program Overview\"\n }\n }\n}",
|
||||
"project": "Education",
|
||||
"id": "a3df7ac4-69e0-41b9-af1c-fd0087d26161",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 21016,
|
||||
"y": 30930.750000000004
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 20716,
|
||||
"y": 30930.750000000004
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
},
|
||||
"tutorial": {
|
||||
"status": "Reset"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Tutorial Step",
|
||||
"name": "A Thank You for Support",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"Programs\\\\support-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - A Thank You for Support\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Topic\",\n \"type\": \"Support Program Overview\"\n }\n }\n}",
|
||||
"project": "Education",
|
||||
"id": "dc20ebdc-6708-4fed-a75b-bade62d3ce0c",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 20903.04694055762,
|
||||
"y": 31165.299444740413
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 20716,
|
||||
"y": 30930.750000000004
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
},
|
||||
"tutorial": {
|
||||
"status": "Reset"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Tutorial Step",
|
||||
"name": "Find a Mentor",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"Programs\\\\mentorship-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Find a Mentor\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Topic\",\n \"type\": \"Mentorship Program Overview\"\n }\n }\n}",
|
||||
"project": "Education",
|
||||
"id": "258b83f3-200d-41d7-8288-81eec5da0ccf",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 20649.243719813105,
|
||||
"y": 31223.22837365455
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 20716,
|
||||
"y": 30930.750000000004
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
},
|
||||
"tutorial": {
|
||||
"status": "Reset"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Tutorial Step",
|
||||
"name": "Claim some Contributions",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"Programs\\\\claims-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Claim some Contributions\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Topic\",\n \"type\": \"Contribution Claims Program Overview\"\n }\n }\n}",
|
||||
"project": "Education",
|
||||
"id": "7301eace-be0a-45f8-9f8d-14afb7e9336a",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 20445.709339629273,
|
||||
"y": 31060.91512173527
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 20716,
|
||||
"y": 30930.750000000004
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
},
|
||||
"tutorial": {
|
||||
"status": "Reset"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Tutorial Step",
|
||||
"name": "Lend a Vote",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"Programs\\\\voting-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Lend a Vote\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Topic\",\n \"type\": \"Voting Program Overview\"\n }\n }\n}",
|
||||
"project": "Education",
|
||||
"id": "61b34c29-85ce-4b86-8a77-21f8e8888c35",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 20445.709339629273,
|
||||
"y": 30800.584878264737
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 20716,
|
||||
"y": 30930.750000000004
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
},
|
||||
"tutorial": {
|
||||
"status": "Reset"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Tutorial Step",
|
||||
"name": "Delegate some Power",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"Programs\\\\delegation-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Delegate some Power\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Topic\",\n \"type\": \"Delegation Program Overview\"\n }\n }\n}",
|
||||
"project": "Education",
|
||||
"id": "bb0b161f-af82-4b93-87a8-30ae6ace533c",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 20649.243719813105,
|
||||
"y": 30638.271626345457
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 20716,
|
||||
"y": 30930.750000000004
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
},
|
||||
"tutorial": {
|
||||
"status": "Reset"
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "Tutorial Step",
|
||||
"name": "Stake some Tokens",
|
||||
"config": "{\n \"icon\": {\n \"name\": \"Programs\\\\staking-program\",\n \"project\": \"Governance\"\n },\n \"position\": \"Left\",\n \"slider\": \"toTop\",\n \"pressButton\": \"\",\n \"docs\": {\n \"project\": \"Governance\",\n \"category\": \"Tutorial\",\n \"type\": \"Tutorial Step - Stake some Tokens\"\n },\n \"controlDocs\": {\n \"panel\": \"Open\",\n \"closeTutorialEditor\": true,\n \"page\": {\n \"project\": \"Governance\",\n \"category\": \"Topic\",\n \"type\": \"Staking Program Overview\"\n }\n }\n}",
|
||||
"project": "Education",
|
||||
"id": "507fc893-7a06-4bba-ba23-fb7125aa2017",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 20903.04694055762,
|
||||
"y": 30696.200555259595
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 20716,
|
||||
"y": 30930.750000000004
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
},
|
||||
"tutorial": {
|
||||
"status": "Reset"
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"tutorialTopics": [],
|
||||
"id": "eb85fbbd-080f-41c6-91a8-c6b68195a74b",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 20716,
|
||||
"y": 30930.750000000004
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 20716,
|
||||
"y": 30930.750000000004
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": true,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 1
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
},
|
||||
"tutorial": {
|
||||
"status": "Done"
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large.
Load diff
+4
-3
@@ -12,7 +12,7 @@ exports.newFoundationsUtilitiesPlugins = function () {
|
||||
|
||||
let path = global.env.PATH_TO_PROJECTS + '/' + project + '/Plugins/' + folder
|
||||
|
||||
CL.nodeModules.fs.readdir(path, (err, files) => {
|
||||
SA.nodeModules.fs.readdir(path, (err, files) => {
|
||||
if (err) {
|
||||
reject()
|
||||
return
|
||||
@@ -33,11 +33,12 @@ exports.newFoundationsUtilitiesPlugins = function () {
|
||||
|
||||
let path = global.env.PATH_TO_PROJECTS + '/' + project + '/Plugins/' + folder + '/' + fileName
|
||||
|
||||
CL.nodeModules.fs.readFile(path, onFileRead)
|
||||
SA.nodeModules.fs.readFile(path, onFileRead)
|
||||
|
||||
function onFileRead(err, file) {
|
||||
if (err) {
|
||||
reject()
|
||||
console.log('[WARN] getPluginFileContent -> File not Found -> Path = ' + path)
|
||||
reject('File not Found')
|
||||
return
|
||||
}
|
||||
resolve(file.toString())
|
||||
@@ -9,6 +9,14 @@
|
||||
"propertyToCheckFor": "githubAPI",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"label": "Add Web3 API",
|
||||
"relatedUiObject": "Web3 API",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "web3API",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
@@ -27,6 +35,11 @@
|
||||
"name": "githubAPI",
|
||||
"type": "node",
|
||||
"childType": "Github API"
|
||||
},
|
||||
{
|
||||
"name": "web3API",
|
||||
"type": "node",
|
||||
"childType": "Web3 API"
|
||||
}
|
||||
],
|
||||
"isPersonalData": true
|
||||
|
||||
@@ -20,6 +20,13 @@
|
||||
"relatedUiObject": "Plugins",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"label": "Add Crypto Ecosystem",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"relatedUiObject": "Crypto Ecosystem",
|
||||
"actionFunction": "payload.executeAction"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"label": "Add APIs",
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"type": "Web3 API",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration",
|
||||
"dontShowAtFullscreen": true,
|
||||
"actionFunction": "uiObject.configEditor.activate"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{ \n\"token\": \"\", \n\"mnemonic\": \"\"\n}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 1,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->APIs->"
|
||||
},
|
||||
"propertyNameAtParent": "web3API",
|
||||
"isPersonalData": true
|
||||
}
|
||||
@@ -1,13 +1,14 @@
|
||||
{
|
||||
"type": "Community",
|
||||
"definition": {
|
||||
"text": "The Community, or the Superalgos Community, is the group of entities participating in the Superalgos project, either actively contributing to advancing the project or passively using the Superalgos software.",
|
||||
"updated": 1618832930339,
|
||||
"text": "The Community, or the Superalgos Community, is the group of entities participating in the Superalgos project, either actively contributing to advancing the project or passively using the Superalgos Network.",
|
||||
"updated": 1630096402584,
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
"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
|
||||
"updated": 1628046272721,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"type": "Current Workspace",
|
||||
"definition": {
|
||||
"text": "The Current Workspace is the Workspace currently loaded in the UI. It may be either a User Workspace or a Plugin Workspace.",
|
||||
"updated": 1629993045840
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Right click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode. Then you can use docs.save to save your changes and app.contribute to send it to the main repository."
|
||||
}
|
||||
]
|
||||
}
|
||||
+4
-3
@@ -1,13 +1,14 @@
|
||||
{
|
||||
"type": "Plugin Workspace",
|
||||
"definition": {
|
||||
"text": "Refers to a Workspace created by a user, contributed to the project as a plugin and distributed with the whole software package. Plugin workspaces are useful to give access to users to ready-to-run strategies, demos, tutorials, or areas of the system under development.",
|
||||
"updated": 1622193639612,
|
||||
"text": "Refers to a Workspace created by a user, contributed to the project as a plugin and distributed with the software package. Plugin workspaces are useful to give users access to ready-to-run strategies, demos, tutorials, or intoductions to areas of the system under development.",
|
||||
"updated": 1629895587555,
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
"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
|
||||
"updated": 1624493472781,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+4
@@ -217,6 +217,10 @@
|
||||
"text": "Before you go any further, do the Beyond the Basics tutorial in the Getting Started plugin workspace so that you learn the basics on how to deal with contributions from within the app. The tutorial will help you get your setup right so that contributions are seamless.",
|
||||
"updated": 1613828879531
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
},
|
||||
{
|
||||
"style": "Block",
|
||||
"text": "Dummy",
|
||||
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"type": "Superalgos Medium Blog",
|
||||
"definition": {
|
||||
"text": "The Superalgos Medium Blog is a Medium Publication where the Superalgos Project makes official announcements and publishes project-related content.",
|
||||
"updated": 1630235403524
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Link",
|
||||
"text": "Go to the Superalgos Medium Blog->medium.com/superalgos",
|
||||
"updated": 1630235431554
|
||||
}
|
||||
]
|
||||
}
|
||||
+2
-2
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"type": "Superalgos Network",
|
||||
"definition": {
|
||||
"text": "The Superalgos Network is a future, to be launched network that will allow users to setup their Client to be part of. Once done Clients will connect to each other in a p2p way, enabling from there the exchange of data and services between users.",
|
||||
"updated": 1621955485325
|
||||
"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
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"type": "Superalgos Project",
|
||||
"definition": {
|
||||
"text": "The Superalgos Project is the open Community, together with it's body of work.",
|
||||
"updated": 1630235520885
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Right click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode. Then you can use docs.save to save your changes and app.contribute to send it to the main repository."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -45,6 +45,11 @@
|
||||
"text": "To load a workspace you got from a third party, you may place the file in the My-Workspaces folder so that you may open it from the workspaces tab. You may also drag the file and drop it on the design space.",
|
||||
"updated": 1615892822939
|
||||
},
|
||||
{
|
||||
"style": "Warning",
|
||||
"text": "It is not recommended to launch multiple instances of the UI in separate browser tabs to load different workspaces at the same time. The system is not prepared to handle this type of use and it may behave erratically as a consequence.",
|
||||
"updated": 1629892156573
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
"text": ""
|
||||
@@ -70,8 +75,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "They are saved automatically every 60 seconds, or at the moment the browser or browser tab is closed. You may also save it manually using the following hot-key combination: ",
|
||||
"updated": 1615886048026
|
||||
"text": "You may save a workspace manually using the following hot-key combination:",
|
||||
"updated": 1629892197901
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
@@ -89,8 +94,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Superalgos ships with several Plugin Workspaces. These are pre-configured workspaces built for specific purposes, for example, to host tutorials, demo strategies, and so on.",
|
||||
"updated": 1616259409951
|
||||
"text": "Superalgos ships with several Plugin Workspaces. These are pre-configured workspaces built for specific purposes, for example, to host tutorials, demo strategies, specific projects, and so on.",
|
||||
"updated": 1629893908384
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
@@ -99,8 +104,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "Plugin workspaces may not be modified. When you load a plugin workspace, a new file is created in your My-Workspaces folder as soon as the workspace is saved for the first time, resulting in a copy of the plugin workspace. The copy is saved with the same name as the plugin but in a different folder. Any modifications you introduce in the workspace are stored in the copy, not the original plugin. Bear in mind that if you don't change the name of the workspace, the file in the My-Workspaces folder will be overwritten if you load the plugin Workspace again. This is because the system will automatically write a file with the same name as the plugin.",
|
||||
"updated": 1615894346258
|
||||
"text": "When you load, modify, and save a Plugin Workspace, the actual plugin file remains intact, that is, the plugin is not modified. Instead, a new file is created in the My-Workspaces folder. This file is a copy of the plugin workspace featuring the modifications you introduced. The copy is saved with the name of the Workspace node, which is usually the same name as the plugin. To save the workspace with a different name, you must change the name of the Workspace node and save.",
|
||||
"updated": 1629894244406
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
@@ -112,7 +117,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "The Tested Exchanges plugin workspace is the best to start with if you wish to create your own Trading System."
|
||||
"text": "The Blank Template Plugin Workspace is the best to start with if you wish to create your own setup.",
|
||||
"updated": 1629894382983
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
@@ -130,7 +136,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Un Workspace 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": 1624292534795
|
||||
"updated": 1624292534795,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+2
-2
@@ -3,8 +3,8 @@
|
||||
"pageNumber": "2",
|
||||
"type": "Getting Started Tutorials Plugin Workspace",
|
||||
"definition": {
|
||||
"text": "This workspace is the first point of contact with Superalgos. It's purpose is to get new users familiar with all the basic aspects of Superalgos.",
|
||||
"updated": 1616145473343
|
||||
"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
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
|
||||
+1
-1
@@ -64,7 +64,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Data Mines are created by power users and contributed to the project (the ones shipping with the software). Users might create Data Mines for their personal use and never share them. However, if they share them, they receive SA tokens for that, and also for adapting and mantaining them, if necessary, for each new release."
|
||||
"text": "Data Mines are created by power users and contributed to the project (the ones shipping with the software). Users might create Data Mines for their personal use and never share them. However, if they share them, they receive SA Tokens for that, and also for adapting and mantaining them, if necessary, for each new release."
|
||||
},
|
||||
{
|
||||
"style": "Title",
|
||||
|
||||
+1
-1
@@ -265,7 +265,7 @@
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Step #30: Once you have successfully mapped the whole API and you have all the needed API Data Fetchers, Indicator Bots and Plotters tested, you are ready to share your API Map and Data Mine with the community as a plugin, and receive SA tokens in exchange for your contribution.",
|
||||
"text": "Step #30: Once you have successfully mapped the whole API and you have all the needed API Data Fetchers, Indicator Bots and Plotters tested, you are ready to share your API Map and Data Mine with the community as a plugin, and receive SA Tokens in exchange for your contribution.",
|
||||
"updated": 1622233875203
|
||||
},
|
||||
{
|
||||
|
||||
+2
-1
@@ -51,7 +51,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "After you repaginate a Topic or Tutorial, the best way to proceed it to manually delete from disk all the files associated with that Topic / Tutorial. After you delete them, you execute the repaginate command and then the docs.save command. "
|
||||
"text": "After you repaginate a Topic or Tutorial, the best way to proceed is to manually delete from disk all the files associated with that Topic / Tutorial. After you delete them, you execute the repaginate command and then the docs.save command.",
|
||||
"updated": 1630500489007
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
|
||||
+13
-3
@@ -146,12 +146,22 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The Masters Data Mine features the definition of the Webhooks sensor bot used to monitor incoming notifications. You need to run an instance of this bot in the data mining section of the exchange and market of your choice.",
|
||||
"updated": 1615370092995
|
||||
"text": "The Webhooks Data Mine features the definition of the Webhooks sensor bot used to monitor incoming notifications. You need to run an instance of this bot in the data mining section of the exchange and market of your choice.",
|
||||
"updated": 1629361373616
|
||||
},
|
||||
{
|
||||
"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."
|
||||
"text": "The Getting-Started-Tutorials workspace does not have this Data Mine as a plugin so you will need to add it first. To do that locate the Plugins node, expand it and at the Plugins Data Mines add a New Plugin File. You can setup it's configuration like this:"
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n \"project\": \"Foundations\",\n \"fileName\": \"Webhooks\",\n \"folderName\": \"Data-Mines\",\n \"nodeType\": \"Data Mine\",\n \"saveWithWorkspace\": false\n}",
|
||||
"updated": 1629361560976
|
||||
},
|
||||
{
|
||||
"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.",
|
||||
"updated": 1629361603647
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
|
||||
+4
-4
@@ -3,14 +3,14 @@
|
||||
"pageNumber": "3",
|
||||
"type": "Develop",
|
||||
"definition": {
|
||||
"text": "The Develop branch is the branch that is being used by developers involved in contributing to Superalgos. All the changes at this branch are sent to the Master branch everytime there is a new release. The Develop branch purpose is for accumulating changes at the codebase untiil the release date when all these changes are moved into the Master branch.",
|
||||
"updated": 1622467883706
|
||||
"text": "The Develop branch is the branch developers use to contribute to the codebase. Changes at this branch are merged into the Master branch upon each release or service pack. The purpose of the Develop branch is to accumulate changes at the codebase until the release date when changes are ready for merging.",
|
||||
"updated": 1630657066558
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Contributors working at this branch coordinate their here:",
|
||||
"updated": 1622468223194
|
||||
"text": "Contributors working at this branch Hang out in the Telegram Develop Group.",
|
||||
"updated": 1630657099841
|
||||
},
|
||||
{
|
||||
"style": "Link",
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@
|
||||
"pageNumber": 1,
|
||||
"type": "Sparta By @julian-molina",
|
||||
"definition": {
|
||||
"text": "The set of indicators built in the Sparta data mine include Simple Moving Average (SMA), Exponential Moving Averege (EMA), Relative Strenght Index (RSI), and Moving Average convergence Divergence (MACD).",
|
||||
"text": "The set of indicators built in the Sparta data mine include Simple Moving Average (SMA), Exponential Moving Averege (EMA), Relative Strength Index (RSI), and Moving Average convergence Divergence (MACD).",
|
||||
"updated": 1611685345604
|
||||
},
|
||||
"paragraphs": [
|
||||
@@ -22,4 +22,4 @@
|
||||
"text": "Collaborate with this data mine and report issues directly at the Superalgos repository."
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"topic": "Sparta Data Mine",
|
||||
"pageNumber": 4,
|
||||
"type": "Relative Strenght Index (RSI) - Sparta Indicator",
|
||||
"type": "Relative Strength Index (RSI) - Sparta Indicator",
|
||||
"definition": {
|
||||
"text": "The indicator produces the standard 14 setting of the Relative Strenght Index.",
|
||||
"text": "The indicator produces the standard 14 setting of the Relative Strength Index.",
|
||||
"updated": 1611662214310
|
||||
},
|
||||
"paragraphs": [
|
||||
@@ -59,4 +59,4 @@
|
||||
"text": "How’s the trend going at the 24-hours chart?"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"tutorial": "Basic Education",
|
||||
"pageNumber": 6,
|
||||
"type": "Tutorial Step - Mary Go Round",
|
||||
"type": "Tutorial Step - Merry Go Round",
|
||||
"definition": {
|
||||
"text": "By default, nodes are locked to a rotational symmetry around their parent node. The symmetry may span 360 degrees or less, depending on the setting!",
|
||||
"updated": 1615316869620,
|
||||
+2
-2
@@ -40,8 +40,8 @@
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "In this folder, you will find a file named Getting Started Tutorials.json. This is the current workspace; the one you are using at this moment. Everything you have been doing lately has been stored here.",
|
||||
"updated": 1622374674340,
|
||||
"text": "This is where you will find the workspaces you may have saved earlier. If the folder is empty or doesn't exist, it means you haven't saved any workspaces yet!",
|
||||
"updated": 1629895377178,
|
||||
"translations": [
|
||||
{
|
||||
"language": "IT",
|
||||
|
||||
+12
-7
@@ -3,12 +3,12 @@
|
||||
"pageNumber": 39,
|
||||
"type": "Tutorial Step - The Current Workspace",
|
||||
"definition": {
|
||||
"text": "The current workspace is the User Workspace you are using at any point.",
|
||||
"text": "The current workspace is the User Workspace or the Plugin Workspace you are using at any point.",
|
||||
"icon": {
|
||||
"name": "workspace",
|
||||
"project": "Foundations"
|
||||
},
|
||||
"updated": 1622375537282,
|
||||
"updated": 1629895521103,
|
||||
"translations": [
|
||||
{
|
||||
"language": "IT",
|
||||
@@ -19,7 +19,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "El espacio de trabajo actual es el User Workspace que estés utilizando en cualquier momento.",
|
||||
"updated": 1626621294273
|
||||
"updated": 1626621294273,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -38,7 +39,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Si cierras y reinicias la aplicación, o actualizas el User Interface, el sistema carga el ultimo Workspace usado.",
|
||||
"updated": 1626622914590
|
||||
"updated": 1626622914590,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -56,7 +58,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Accede al menú del nodo Workspace, doble clic en la etiqueta \"Getting Started Tutorials\" y cámbialo a \"Basic Education\".",
|
||||
"updated": 1626621401640
|
||||
"updated": 1626621401640,
|
||||
"style": "Callout"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -74,7 +77,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Ahora presiona Ctrl + Shift + Alt + Key-S",
|
||||
"updated": 1626621439639
|
||||
"updated": 1626621439639,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -92,7 +96,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Ve a la carpeta My-Workspaces para verificar que el nuevo archivo está allí. ¡Encuéntralo también en la pestaña de espacios de trabajo!",
|
||||
"updated": 1626622475717
|
||||
"updated": 1626622475717,
|
||||
"style": "Success"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+2
-2
@@ -46,8 +46,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "New Plugin File nodes are created for every plugin in \\Plugins\\Trading-Systems. You may delete the Plugin File nodes you don't need and keep the ones you do need! Then, you may add and pin the Plugin File Position node where you wish to place the actual plugin!",
|
||||
"updated": 1622376327556,
|
||||
"text": "New Plugin File nodes are created for every plugin in \\Foundations\\Plugins\\Trading-Systems. You may delete the Plugin File nodes you don't need and keep the ones you want! Now add and pin the Plugin File Position node where you wish to place the plugin hierarchy!",
|
||||
"updated": 1629896019687,
|
||||
"translations": [
|
||||
{
|
||||
"language": "IT",
|
||||
|
||||
+13
-8
@@ -27,8 +27,8 @@
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Warning",
|
||||
"text": "Hierarchies included in the workspace as plugins are not saved by default. As such, changes made in those hierarchies do not persist. ",
|
||||
"updated": 1628349317266,
|
||||
"text": "Hierarchies placed in the workspace as plugins do not save with the workspace by default. As a result, changes made in those hierarchies do not persist, unless you save them manually or enable automatic saving. ",
|
||||
"updated": 1629897700219,
|
||||
"translations": [
|
||||
{
|
||||
"language": "IT",
|
||||
@@ -46,26 +46,31 @@
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "If you would like to make changes to a plugin you will need to enable saving. To do this find the Plugin File node associated with the hierarchy you would like to save. Then simply click the Enable Saving with Workspace button. It's that easy!",
|
||||
"updated": 1628349401737,
|
||||
"text": "There are two main use cases for modifying plugins:",
|
||||
"updated": 1629897808476,
|
||||
"translations": [
|
||||
{
|
||||
"language": "IT",
|
||||
"text": "Nei prossimi step vedremo più in dettaglio quanto detto!",
|
||||
"updated": 1619590413453,
|
||||
"style": "Success"
|
||||
"style": "Text"
|
||||
},
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡Pasaré por algunos casos de uso específicos en los próximos pasos!",
|
||||
"updated": 1626702765005,
|
||||
"style": "Success"
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "I will go through some specific use cases in the next few steps!"
|
||||
"style": "List",
|
||||
"text": "You wish to modify a plugin to make it your own and keep working with the modified version in the future.",
|
||||
"updated": 1629897838348
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "You wish to update and improve a plugin to contribute the improvements to the project."
|
||||
}
|
||||
]
|
||||
}
|
||||
+6
-6
@@ -3,12 +3,12 @@
|
||||
"pageNumber": 46,
|
||||
"type": "Tutorial Step - Starting From a Plugin",
|
||||
"definition": {
|
||||
"text": "A typical case is when you wish to introduce changes to a strategy shipping with the system to start with a proven setup!",
|
||||
"text": "Let's look into the first scenario: a typical case is when you wish to introduce changes to a strategy shipping with the system to start with a proven setup!",
|
||||
"icon": {
|
||||
"name": "Trading\\trading-system",
|
||||
"project": "Foundations"
|
||||
},
|
||||
"updated": 1615995229226,
|
||||
"updated": 1629908121952,
|
||||
"translations": [
|
||||
{
|
||||
"language": "IT",
|
||||
@@ -27,8 +27,8 @@
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Let's say you are just starting with Superalgos, did a few tutorials, and are ready to start playing with a strategy. You want to start with an existing strategy and introduce minor modifications to better understand how things work. The strategy in question is included as a plugin in a specific workspace. Simply enable saving and you are good to go!",
|
||||
"updated": 1628349943318,
|
||||
"text": "Let's say you are ready to start playing with a strategy. You want to start with an existing one and introduce modifications to understand how things work. You don't intend to contribute the changes. You just wish to play with it and tune it to your liking! Then, do the following:",
|
||||
"updated": 1629908540100,
|
||||
"translations": [
|
||||
{
|
||||
"language": "IT",
|
||||
@@ -46,8 +46,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "In such cases, you must delete the Plugin File node corresponding to the Trading System and restore the original file in the \\Plugins\\Trading-Systems folder as if it was a backup: drag the file and drop it on the Design Space!",
|
||||
"updated": 1615995483240,
|
||||
"text": "Delete the Plugin File node corresponding to the Trading System and restore the original plugin file (in the \\Plugins\\Trading-Systems folder) as if it was a backup: drag the file and drop it on the Design Space! The strategy now lives in the workspace and you may modify and save it!",
|
||||
"updated": 1629908649650,
|
||||
"translations": [
|
||||
{
|
||||
"language": "IT",
|
||||
|
||||
+16
-22
@@ -3,12 +3,12 @@
|
||||
"pageNumber": 47,
|
||||
"type": "Tutorial Step - Improving a Plugin",
|
||||
"definition": {
|
||||
"text": "Let's say you are a developer and are testing a new exchange. You wish to modify the Sensor Bot to introduce a new feature or param.",
|
||||
"text": "About the second scenario: let's say you are testing the EMA indicator, found a bug and know how to fix it. You intend to contribute the fix so that everyone benefits from it!",
|
||||
"icon": {
|
||||
"name": "sensor-bot",
|
||||
"project": "Foundations"
|
||||
},
|
||||
"updated": 1615996858987,
|
||||
"updated": 1629909327051,
|
||||
"translations": [
|
||||
{
|
||||
"language": "IT",
|
||||
@@ -19,15 +19,16 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Si eres un desarrollador y estás probando un nuevo exchange. Deseas modificar el Sensor Bot para introducir una nueva característica o parámetro.",
|
||||
"updated": 1626710809333
|
||||
"updated": 1626710809333,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The Sensor Bot is part of the Candles Data Mine, which is usually included as a plugin in most plugin workspaces. In such a case, you must proceed like in the previous case: enable saving and get to work! You can find your new modified file in the Plugins\\Data-Mines folder as if it was a backup.",
|
||||
"updated": 1628350435675,
|
||||
"text": "This Indicator Bot is part of the Sparta Data Mine, which is usually included as a plugin in some plugin workspaces. To modify the plugin from within the UI and save the changes, you have two options:",
|
||||
"updated": 1629909479093,
|
||||
"translations": [
|
||||
{
|
||||
"language": "IT",
|
||||
@@ -38,27 +39,20 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "El Sensor Bot es parte del Candles Data Mine, que generalmente se incluye como plugin en la mayoría de los workspaces de plugins. En tal caso, debes proceder como en el caso anterior: eliminar el nodo Plugin File correspondiente a los Candles Data Mine y restaurar el archivo de mina de datos desde la carpeta Plugins\\Data-Mines como si fuera un backup.",
|
||||
"updated": 1626709343670
|
||||
"updated": 1626709343670,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "Once you finish, submit a PR to contribute the improvements on the bot!",
|
||||
"updated": 1628350465749,
|
||||
"translations": [
|
||||
{
|
||||
"language": "IT",
|
||||
"text": "Una volta finito, fai un backup del nuovo nodo Masters Data Mine e usalo per rimpiazzare il plugin file Masters! Assicurati di dargli lo stesso nome. Poi, apri una Pull Request per contribuire al miglioramento del bot!",
|
||||
"updated": 1619590866081,
|
||||
"style": "Success"
|
||||
},
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Toma un backup de los modificados nodos Candles Data Mine y usa el archivo de respaldo para reemplazar el archivo Candles plugin! ¡Asegúrate de darle el mismo nombre! Luego, envía un PR para contribuir con las mejoras en el bot.",
|
||||
"updated": 1626710763189
|
||||
}
|
||||
]
|
||||
"style": "List",
|
||||
"text": "Go to the corresponding Plugin File in the Plugins hierarchy and select Enable Saving With Workspace on the menu. Now the plugin file is updated every time you save the workspace to include the changes you may have introduced!",
|
||||
"updated": 1629909628165
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Or use the Save Plugin option to manually save the plugin file whenever you wish to!",
|
||||
"updated": 1629909705348
|
||||
}
|
||||
]
|
||||
}
|
||||
+2
-2
@@ -1,9 +1,9 @@
|
||||
{
|
||||
"tutorial": "Basic Education",
|
||||
"pageNumber": 48,
|
||||
"type": "Tutorial Step - Talking Exchanges",
|
||||
"type": "Tutorial Step - Let's Talk Exchanges",
|
||||
"definition": {
|
||||
"text": "Now that I mentioned testing exchanges, let's talk a bit about how Superalgos deals with them and which ones you may use...",
|
||||
"text": "We all have our preferred exchanges... let's talk a bit about how Superalgos deals with them and which ones you may use...",
|
||||
"icon": {
|
||||
"name": "crypto-exchange",
|
||||
"project": "Foundations"
|
||||
+10
-6
@@ -19,15 +19,16 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Hablando de exchanges y plugins probados, hay un espacio de trabajo de plugins que se puede usar como borrón y cuenta nueva al diseñar cosas nuevas.",
|
||||
"updated": 1628015811665
|
||||
"updated": 1628015811665,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "It's the Blake Template Plugin Workspace!",
|
||||
"updated": 1628356623276,
|
||||
"text": "It's the Blank Template Plugin Workspace!",
|
||||
"updated": 1629912296914,
|
||||
"translations": [
|
||||
{
|
||||
"language": "IT",
|
||||
@@ -38,7 +39,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡Es el Tested Exchanges Plugin Workspace!",
|
||||
"updated": 1628015859577
|
||||
"updated": 1628015859577,
|
||||
"style": "Note"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -56,7 +58,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Una vez que termines tu educación inicial con todos los tutoriales existentes, eventualmente estarás listo para comenzar a construir tu propio Trading System. ¡Este es el Plugin Workspace que puedes usar para ese propósito!",
|
||||
"updated": 1628016330767
|
||||
"updated": 1628016330767,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -74,7 +77,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Cuenta con un Trading System limpio desde el primer momento, el Install New Market Tutorial y la línea de exchages probados que puedes usar.",
|
||||
"updated": 1628016671067
|
||||
"updated": 1628016671067,
|
||||
"style": "Success"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+9
-5
@@ -5,7 +5,7 @@
|
||||
"definition": {
|
||||
"text": "The data you download from exchanges and process with indicators is available across the board, accessible from any workspace and strategy.",
|
||||
"icon": {
|
||||
"name": "dataset-definition",
|
||||
"name": "Data\\dataset-definition",
|
||||
"project": "Foundations"
|
||||
},
|
||||
"updated": 1616174427620,
|
||||
@@ -19,7 +19,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Los datos que descargas de los exchanges y procesas están disponibles en todos los ámbitos, accesibles desde cualquier Workspace y estrategia.",
|
||||
"updated": 1628020470335
|
||||
"updated": 1628020470335,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -38,7 +39,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Los datos se almacenan en el disco en la carpeta Data-Storage y están organizados por Project, Data Mine, bot y Market. No importa qué Worksapce hayas utilizado para minar los datos o los indicadores de proceso.",
|
||||
"updated": 1628017724144
|
||||
"updated": 1628017724144,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -55,7 +57,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Todos los datos están disponibles para todos los espacios de trabajo, por lo que puedes trabajar con las mismas fuentes de datos independientemente de lo que estés haciendo.",
|
||||
"updated": 1628017031765
|
||||
"updated": 1628017031765,
|
||||
"style": "Note"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -73,7 +76,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "No hay gestión de datos incorporada en la aplicación. ¡Utilice tu sistema de archivos!",
|
||||
"updated": 1628019703596
|
||||
"updated": 1628019703596,
|
||||
"style": "Success"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+9
-5
@@ -5,7 +5,7 @@
|
||||
"definition": {
|
||||
"text": "You may work with any of the markets listed at the exchange! Take a look at the setup in the Exchange Markets node!",
|
||||
"icon": {
|
||||
"name": "market",
|
||||
"name": "Market\\market",
|
||||
"project": "Foundations"
|
||||
},
|
||||
"updated": 1616176775093,
|
||||
@@ -19,7 +19,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡Puedes trabajar con cualquiera de los mercados listados en el exchange! ¡Echa un vistazo a la configuración en el nodo Exchange Markets!",
|
||||
"updated": 1628020751758
|
||||
"updated": 1628020751758,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -38,7 +39,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "No voy a explicar cómo configurar nuevos mercados, ya que el tema se trata en Install a New Market Tutorial in the Install a New Market Tutorial Plugin Workspace. ¡Solo quería hacerte saber que es fácil!",
|
||||
"updated": 1628020854073
|
||||
"updated": 1628020854073,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -56,7 +58,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡Eche un vistazo al menú del mercado BTC/USDT! Observe los botones \"Install Market\" y \"Uninstall Market\" . ¡Asi es como lo haces!",
|
||||
"updated": 1628021245760
|
||||
"updated": 1628021245760,
|
||||
"style": "Callout"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -74,7 +77,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡Lo dejaré así y te dejaré hacer el Install a New Market Tutorial cuando sea tu tiempo!",
|
||||
"updated": 1628021318712
|
||||
"updated": 1628021318712,
|
||||
"style": "Success"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+9
-5
@@ -6,7 +6,7 @@
|
||||
"text": "Indicators are built by the Community! Usually, a developer will build a few indicators he or she needs, and contribute them to the project in a new Data Mine!",
|
||||
"updated": 1616235133472,
|
||||
"icon": {
|
||||
"name": "data-mine",
|
||||
"name": "Data\\data-mine",
|
||||
"project": "Foundations"
|
||||
},
|
||||
"translations": [
|
||||
@@ -19,7 +19,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡Los indicadores los construye la comunidad! Un desarrollador construirá indicadores que necesita y los aportará al proyecto en una nueva mina de datos.",
|
||||
"updated": 1628024771860
|
||||
"updated": 1628024771860,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -38,7 +39,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "El Community Data Mines Book es donde puedes encontrar todas los Data Mines y sus indicadores. Cada capítulo del libro corresponde a un Data Mine...",
|
||||
"updated": 1628024715026
|
||||
"updated": 1628024715026,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -55,7 +57,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡Escanea el contenido de cada capítulo para saber de lo que está disponible en este momento!",
|
||||
"updated": 1628023653141
|
||||
"updated": 1628023653141,
|
||||
"style": "Callout"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -73,7 +76,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Para usar un Data Mine, debes incluirlo en el espacio de trabajo o como complemento e instalar el mercado. ¡Todas las tareas de datos se crearán automáticamente!",
|
||||
"updated": 1628024742935
|
||||
"updated": 1628024742935,
|
||||
"style": "Success"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+9
-5
@@ -6,14 +6,15 @@
|
||||
"text": "Are you wondering how to get data from sources other than exchanges in CCXT? Messari? Twitter? We've got you covered!",
|
||||
"updated": 1622645027378,
|
||||
"icon": {
|
||||
"name": "api-map",
|
||||
"name": "Api\\api-map",
|
||||
"project": "Foundations"
|
||||
},
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¿Se preguntas cómo obtener datos de fuentes distintas a los intercambios en CCXT? Messari? Twitter? ¡Te tenemos cubierto!",
|
||||
"updated": 1628032498537
|
||||
"updated": 1628032498537,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -26,7 +27,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Superalgos le permite obtener datos de cualquier API en Internet, ¡y no necesitas programar para hacerlo! En su lugar, puedes diseñar un API Map o utilizar los que se envían con el sistema.",
|
||||
"updated": 1628032719618
|
||||
"updated": 1628032719618,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -38,7 +40,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Un API Map es un conjunto de definiciones que dictan cómo un bot puede acceder a una API en particular y cómo interpretar las respuestas del servidor.",
|
||||
"updated": 1628032814964
|
||||
"updated": 1628032814964,
|
||||
"style": "Note"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -50,7 +53,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡Sumérgete en esta sección del Data Mining para explorar el panorama de API!",
|
||||
"updated": 1628032872757
|
||||
"updated": 1628032872757,
|
||||
"style": "Callout"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+9
-5
@@ -5,7 +5,7 @@
|
||||
"definition": {
|
||||
"text": "The Community may also contribute Trading Systems! At this point, there're only a few, but we hope more will emerge soon!",
|
||||
"icon": {
|
||||
"name": "trading-system",
|
||||
"name": "Trading\\trading-system",
|
||||
"project": "Foundations"
|
||||
},
|
||||
"updated": 1616235875824,
|
||||
@@ -19,7 +19,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡La comunidad también puede contribuir con Trading Systems! En este punto, solo quedan unos pocos, ¡pero esperamos que surjan más pronto!",
|
||||
"updated": 1628032965847
|
||||
"updated": 1628032965847,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -38,7 +39,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Busca en los documentos Community Trading Systems!",
|
||||
"updated": 1628032998404
|
||||
"updated": 1628032998404,
|
||||
"style": "Callout"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -56,7 +58,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Strategies contribuidas por el Community están documentados para que pueda usarlos para aprender.",
|
||||
"updated": 1628033107293
|
||||
"updated": 1628033107293,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -74,7 +77,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Recuerda que mientras Trading Systems en Superalgos pueden ser completamente funcionales, ¡están disponibles solo con fines educativos! ¡Eres completamente responsable de cómo lo usas! ¡Trading es un negocio arriesgado!",
|
||||
"updated": 1628033267499
|
||||
"updated": 1628033267499,
|
||||
"style": "Warning"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+9
-5
@@ -6,7 +6,7 @@
|
||||
"text": "Congratulations! You've graduated from your Basic Education and are ready to move on to more advanced stuff!",
|
||||
"updated": 1616262672256,
|
||||
"icon": {
|
||||
"name": "trading-strategy",
|
||||
"name": "Trading\\trading-strategy",
|
||||
"project": "Foundations"
|
||||
},
|
||||
"translations": [
|
||||
@@ -19,7 +19,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡Felicidades! Te has graduado de tu Basic Education y estas listo para pasar a cosas más avanzadas!",
|
||||
"updated": 1628034332132
|
||||
"updated": 1628034332132,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -38,7 +39,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "En el siguiente tutorial, aprenderás cómo actualizar tu aplicación, cambiar de rama para probar la versión en la rama de desarrollo, algunos trucos sobre los Documentos y más.",
|
||||
"updated": 1628033834427
|
||||
"updated": 1628033834427,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -56,7 +58,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡También podrás enviar una reseña sobre tu experiencia con Superalgos hasta este momento!",
|
||||
"updated": 1628033856097
|
||||
"updated": 1628033856097,
|
||||
"style": "Callout"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -74,7 +77,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "A medida que avanzas, es posible que necesites un repaso de los temas tratados en este tutorial o en el anterior. Esa es una práctica estándar, ¡así que regresa hasta que aprenda todos los trucos!",
|
||||
"updated": 1628033960361
|
||||
"updated": 1628033960361,
|
||||
"style": "Success"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+7
-4
@@ -6,7 +6,7 @@
|
||||
"text": "You're still around, now with the first two tutorials under your belt! You're family already! Welcome to the Community!",
|
||||
"updated": 1616757706219,
|
||||
"icon": {
|
||||
"name": "tutorial",
|
||||
"name": "Tutorial\\tutorial",
|
||||
"project": "Foundations"
|
||||
},
|
||||
"translations": [
|
||||
@@ -19,7 +19,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡Todavía estás aquí, ahora con los dos primeros tutoriales en tu haber! ¡Ya eres familia! Bienvenido a la Community!",
|
||||
"updated": 1628112222837
|
||||
"updated": 1628112222837,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -38,7 +39,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "En este tutorial, aprenderás a mantener tu sistema actualizado, utilizar la línea de comandos incorporada, cambiar de rama y algunos trucos más que le facilitarán la vida.",
|
||||
"updated": 1628112392254
|
||||
"updated": 1628112392254,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -56,7 +58,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡Las habilidades que aprenderás también te permitirán comenzar a contribuir al proyecto! Recuerda, este es un proyecto comunitario ... ¡Se espera que todos retribuyamos y ayudemos a mejorar el software!",
|
||||
"updated": 1628112441113
|
||||
"updated": 1628112441113,
|
||||
"style": "Note"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+7
-4
@@ -5,7 +5,7 @@
|
||||
"definition": {
|
||||
"text": "Let me make a quick pause to point out something important regarding the safety of your keys and tokens...",
|
||||
"icon": {
|
||||
"name": "exchange-account-key",
|
||||
"name": "Exchange\\exchange-account-key",
|
||||
"project": "Foundations"
|
||||
},
|
||||
"updated": 1610818135402,
|
||||
@@ -19,7 +19,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Permíteme hacer una breve pausa para señalar algo importante con respecto a la seguridad de tus keys y tokens...",
|
||||
"updated": 1628196629922
|
||||
"updated": 1628196629922,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -38,7 +39,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Superalgos almacena el archivo del espacio de trabajo que contiene tus claves y tokens en formato JSON, sin cifrar. En este estado, esta información crucial es tan segura como lo sea tu computadora.",
|
||||
"updated": 1628196749419
|
||||
"updated": 1628196749419,
|
||||
"style": "Important"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -56,7 +58,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Nunca comparta tu archivo de workspace TAL CUAL. Para compartir un workspace, usa el botón Share en el menú. Crea una copia segura para compartir despojada de información confidencial al eliminar el APIs jerarquía y la sección Exchange Accounts del nodo Crypto Exchange.",
|
||||
"updated": 1628196946570
|
||||
"updated": 1628196946570,
|
||||
"style": "Warning"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
+7
-4
@@ -5,7 +5,7 @@
|
||||
"definition": {
|
||||
"text": "Most files within the Superalgos folder are subject to be modified and contributed to the project! That includes code, images, documentation, etc.",
|
||||
"icon": {
|
||||
"name": "dataset",
|
||||
"name": "Data\\dataset",
|
||||
"project": "Foundations"
|
||||
},
|
||||
"updated": 1610823292611,
|
||||
@@ -19,7 +19,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡La mayoría de los archivos dentro de la carpeta Superalgos están sujetos a ser modificados y contribuidos al proyecto! Eso incluye código, imágenes, documentación, etc.",
|
||||
"updated": 1628192328992
|
||||
"updated": 1628192328992,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -38,7 +39,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Estas carpetas están exentas de ser aportadas: My-Workspaces, Data-Storage y Log-Files.",
|
||||
"updated": 1628192469502
|
||||
"updated": 1628192469502,
|
||||
"style": "Callout"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -56,7 +58,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡No use la carpeta de Superalgos para almacenar cosas personales o archivos que no deben ser parte del software de Superalgos! Lo que incluyas en la carpeta de Superalgos (excepto las carpetas exentas indicadas) está sujeto a enviarse a tu fork en GitHub.com e incluirse en una solicitud de extracción, ¡ambos de acceso público!",
|
||||
"updated": 1628194028189
|
||||
"updated": 1628194028189,
|
||||
"style": "Important"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+5
-3
@@ -6,7 +6,7 @@
|
||||
"text": "Let's get on with the task at hand! Copy the command below, paste it on the search/command box, and hit Enter!",
|
||||
"updated": 1610912478164,
|
||||
"icon": {
|
||||
"name": "docs-json-code-style",
|
||||
"name": "Docs\\docs-json-code-style",
|
||||
"project": "Foundations"
|
||||
},
|
||||
"translations": [
|
||||
@@ -19,7 +19,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡Sigamos con la tarea que tenemos entre manos! Copia el comando a continuación, pégalo en el cuadro de búsqueda / comando y presiona Enter!",
|
||||
"updated": 1628197068338
|
||||
"updated": 1628197068338,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -43,7 +44,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "En Windows, aparece un cuadro de inicio de sesión de GitHub que ofrece la posibilidad de autenticarse con un token o contraseña. ¡Cualquiera debería funcionar! ¡Se requiere la última versión de Git! Si tienes problemas, reiniciar la PC puede ayudar. En Mac y Linux, es la Terminal la que solicita las credenciales. Si habilitaste la autenticación de dos factores en GitHub, usa el token incluso si se le solicita la contraseña.",
|
||||
"updated": 1628198214740
|
||||
"updated": 1628198214740,
|
||||
"style": "Important"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+9
-5
@@ -6,7 +6,7 @@
|
||||
"text": "This is awesome! You are already helping the project! We are grateful for your first contribution and hope there's more to come!",
|
||||
"updated": 1617031656299,
|
||||
"icon": {
|
||||
"name": "docs-success-style",
|
||||
"name": "Docs\\docs-success-style",
|
||||
"project": "Foundations"
|
||||
},
|
||||
"translations": [
|
||||
@@ -19,7 +19,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡Esto es asombroso! ¡Ya estás ayudando al proyecto! ¡Estamos agradecidos por tu primera contribución y esperamos que haya más por venir!",
|
||||
"updated": 1628198352736
|
||||
"updated": 1628198352736,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -38,7 +39,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Si todo salió bien con tu autenticación, deberías ver el App Message - Contribution Done!",
|
||||
"updated": 1628198389832
|
||||
"updated": 1628198389832,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -56,7 +58,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Los encargados del proyecto revisarán tu Pull Request y actuar en consecuencia. Si es posible fusionarlo sin conflictos, ¡debería estar disponible pronto! ¡Atento a las notificaciones de GitHub.com!",
|
||||
"updated": 1628198467452
|
||||
"updated": 1628198467452,
|
||||
"style": "Success"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -68,7 +71,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Si algo salió mal con el Git Authentication, Sigue las instrucciones de la página de error para solucionar el problema o pide ayuda en el Develop Group.",
|
||||
"updated": 1628198531991
|
||||
"updated": 1628198531991,
|
||||
"style": "Warning"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+13
-8
@@ -19,7 +19,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡Felicidades! ¡Has llegado al final de otro tutorial! ¡Espero que sienta que está empezando a comprender cómo funciona Superalgos!",
|
||||
"updated": 1628200006294
|
||||
"updated": 1628200006294,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -38,14 +39,15 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡Hablemos de lo que viene después! La página que acabo de abrir es First Steps Tutorials book. ¡A partir de ahora, puede elegir qué tutoriales deseas hacer!",
|
||||
"updated": 1628200392617
|
||||
"updated": 1628200392617,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Take a look at the list of tutorials available on each of the Plugin Worspaces and choose which one to do next! I believe the order in the list may be appropriate, but it probably depends on your interests, so I'll leave it up to you!",
|
||||
"updated": 1617034816159,
|
||||
"text": "Take a look at the list of tutorials available on each of the Plugin Worspaces and choose which one to do next!",
|
||||
"updated": 1629914136171,
|
||||
"translations": [
|
||||
{
|
||||
"language": "IT",
|
||||
@@ -56,13 +58,14 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Echa un vistazo a la lista de tutoriales disponibles en los Plugin Worspaces ¡y elige cuál hacer a continuación! Creo que el orden en la lista puede ser apropiado, pero probablemente dependa de tus intereses, ¡así que lo dejaré en tus manos!",
|
||||
"updated": 1628200313162
|
||||
"updated": 1628200313162,
|
||||
"style": "Callout"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "See you on the next tutorial!",
|
||||
"text": "To participate in the next Airdrop and Governance in general, get started by loading the Token Distribution Superalgos Plugin Workspace!",
|
||||
"translations": [
|
||||
{
|
||||
"language": "IT",
|
||||
@@ -73,9 +76,11 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡Nos vemos en el próximo tutorial!",
|
||||
"updated": 1628200369762
|
||||
"updated": 1628200369762,
|
||||
"style": "Success"
|
||||
}
|
||||
]
|
||||
],
|
||||
"updated": 1629914176718
|
||||
}
|
||||
]
|
||||
}
|
||||
-33
@@ -1,33 +0,0 @@
|
||||
{
|
||||
"tutorial": "Creating Your User Profile Tutorial",
|
||||
"pageNumber": 2,
|
||||
"type": "Tutorial Step - Better Together",
|
||||
"definition": {
|
||||
"text": "Welcome to Superalgos Governance! Today I will walk you through everything you need to know about creating a Superalgos User Profile and joining the Governance network!",
|
||||
"updated": 1629164302622,
|
||||
"icon": {
|
||||
"name": "Charting-Space/chart-points",
|
||||
"project": "Foundations"
|
||||
}
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "As a completely open source and collaborative project, Superalgos is not run by any singular set of people. ",
|
||||
"updated": 1629164311647
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Even the core team, who are dedicated to improving and maintaining Superalgos, do not directly control the path development will take. ",
|
||||
"updated": 1629164322397
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Instead, the governance system distributes decision making power across all register users by leveraging the SA token."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
-28
@@ -1,28 +0,0 @@
|
||||
{
|
||||
"tutorial": "Creating Your User Profile Tutorial",
|
||||
"pageNumber": 3,
|
||||
"type": "Tutorial Step - Make sure You’re Comfortable",
|
||||
"definition": {
|
||||
"text": "Before you jump into governance, it’s important you know what is being governed!",
|
||||
"updated": 1629147485727,
|
||||
"icon": {
|
||||
"name": "Charting-Space/charting-space",
|
||||
"project": "Foundations"
|
||||
}
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "We have got a lot of exciting things to talk about, but I want to make sure you can follow along easily. ",
|
||||
"updated": 1629164474591
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "If you haven't already, take some time to go through the Getting Started Tutorials."
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "There is no need to be an expert, but some general knowledge of the system will make your time in the Governance project much more productive."
|
||||
}
|
||||
]
|
||||
}
|
||||
-29
@@ -1,29 +0,0 @@
|
||||
{
|
||||
"tutorial": "Creating Your User Profile Tutorial",
|
||||
"pageNumber": 4,
|
||||
"type": "Tutorial Step - One Token to Rule Them All",
|
||||
"definition": {
|
||||
"text": "Unlike some crypto currencies the SA token actually means something!",
|
||||
"updated": 1629162158011,
|
||||
"icon": {
|
||||
"name": "design-space",
|
||||
"project": "Foundations"
|
||||
}
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "The SA token is a BEP20 token hosted on the Binance Smart Chain (BSC). It represents your amount of investment in the Superalgos project and community. It is a way to reward and grow the Superalgos user base and development pool.",
|
||||
"updated": 1629164803435
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "This means that the more you contribute to the project and help others, the more tokens you will earn!",
|
||||
"updated": 1629164817915
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
-25
@@ -1,25 +0,0 @@
|
||||
{
|
||||
"tutorial": "Creating Your User Profile Tutorial",
|
||||
"pageNumber": 10,
|
||||
"type": "Tutorial Step - Where is all Begins",
|
||||
"definition": {
|
||||
"text": "Here we are at the head of the governance project. Let’s get that profile created!",
|
||||
"updated": 1629163572836,
|
||||
"icon": {
|
||||
"name": "Charting-Space/dashboard",
|
||||
"project": "Foundations"
|
||||
}
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Click the Add Profile Constructor button.",
|
||||
"updated": 1629163599518
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Now position the resulting Profile Constructor node where it is easy to see.",
|
||||
"updated": 1629163626525
|
||||
}
|
||||
]
|
||||
}
|
||||
-30
@@ -1,30 +0,0 @@
|
||||
{
|
||||
"tutorial": "Creating Your User Profile Tutorial",
|
||||
"pageNumber": 11,
|
||||
"type": "Tutorial Step - Profile in a Heartbeat",
|
||||
"definition": {
|
||||
"text": "The Profile Constructor is the device you will use to set up your profile. ",
|
||||
"updated": 1629163751173,
|
||||
"icon": {
|
||||
"name": "under-construction",
|
||||
"project": "Foundations"
|
||||
}
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Not only that but it will create a unique Binance Smart Chain wallet that is connected with your profile. We call it your Governance Address.",
|
||||
"updated": 1629166742408
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "This means that you will not be able to use any existing wallet addresses you may own, but will create a new one. ",
|
||||
"updated": 1629166737533
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "Your Governance Address will allow you to receive the SA tokens you earn. Superalgos will also read the balance of this address to become aware of the number of SA tokens you hold, and assign your profile an equivalent amount of Token Power.",
|
||||
"updated": 1629166705049
|
||||
}
|
||||
]
|
||||
}
|
||||
-33
@@ -1,33 +0,0 @@
|
||||
{
|
||||
"tutorial": "Creating Your User Profile Tutorial",
|
||||
"pageNumber": 12,
|
||||
"type": "Tutorial Step - Pump that Heartbeat!",
|
||||
"definition": {
|
||||
"text": "Now let’s configure that constructor! ",
|
||||
"updated": 1629167048288,
|
||||
"icon": {
|
||||
"name": "Time/time-machine",
|
||||
"project": "Foundations"
|
||||
}
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Click the configuration option and type your GitHub username under the username properly.",
|
||||
"updated": 1629167062088
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "It should look something like this:"
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n \"githubUsername\": \"My Awesome Username\"\n}",
|
||||
"updated": 1629167126327
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
-33
@@ -1,33 +0,0 @@
|
||||
{
|
||||
"tutorial": "Creating Your User Profile Tutorial",
|
||||
"pageNumber": 12,
|
||||
"type": "Tutorial Step - Pump that Heartbeat!",
|
||||
"definition": {
|
||||
"text": "Now let’s configure that Profile Constructor!",
|
||||
"updated": 1629167519082,
|
||||
"icon": {
|
||||
"name": "Time/time-machine",
|
||||
"project": "Foundations"
|
||||
}
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Click the configuration option and type your GitHub username under the username properly.",
|
||||
"updated": 1629167062088
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "It should look something like this:"
|
||||
},
|
||||
{
|
||||
"style": "Json",
|
||||
"text": "{\n \"githubUsername\": \"My Awesome Username\"\n}",
|
||||
"updated": 1629167126327
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
-23
@@ -1,23 +0,0 @@
|
||||
{
|
||||
"tutorial": "Creating Your User Profile Tutorial",
|
||||
"pageNumber": 13,
|
||||
"type": "Tutorial Step - Oh so Shiny",
|
||||
"definition": {
|
||||
"text": "Write a summary for this tutorial page."
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "We are almost there. Now click create user profile and watch the magic happen. That’s right, you just created your profile!",
|
||||
"updated": 1629167761539
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "While we didn’t have to break a sweat making your profile, some pretty amazing things happened behind the scenes. The constructor just generated your user profile, and unique SA Token Governance address. A cryptographic message with your GitHub.com username has been signed with the private key corresponding to the address just generated. This message will be stored in your User Profile so that we may authenticate it comes from you once you submit your profile as a plugin in the Governance Project."
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "What this means is that your profile, and its associated token address, can only be accessed and changed by you!"
|
||||
}
|
||||
]
|
||||
}
|
||||
+38
-6
@@ -4,23 +4,55 @@
|
||||
"type": "Tutorial - Defining a Trading Idea",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Foundations",
|
||||
"name": "trading-strategy"
|
||||
"name": "Trading\\trading-strategy",
|
||||
"project": "Foundations"
|
||||
},
|
||||
"text": "Before you may build a Trading Strategy, you first need to come up with a clear and testable trading idea."
|
||||
"text": "Before you may build a Trading Strategy, you first need to come up with a clear and testable trading idea.",
|
||||
"updated": 1630376091762,
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Antes de que puedas crear una estrategia comercial, primero debe tener una idea comercial clara y comprobable.",
|
||||
"updated": 1630376694793
|
||||
}
|
||||
]
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "A trading idea is a precursor to a trading strategy. While a complete strategy entails the rules for taking, managing and exiting a position, a trading idea is concerned with the first of those issues only."
|
||||
"text": "A trading idea is a precursor to a trading strategy. While a complete strategy entails the rules for taking, managing and exiting a position, a trading idea is concerned with the first of those issues only.",
|
||||
"updated": 1630376114821,
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Una idea trading es un precursor de una estrategia comercial. Si bien una estrategia completa implica las reglas para tomar, administrar y salir de una posición, una idea trading se ocupa únicamente del primero de esos aspectos.",
|
||||
"updated": 1630376730606
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Testing a trading idea before committing to building a complete strategy is the logical approach because managing and exiting failed entries is not what you should be aiming for!"
|
||||
"text": "Testing a trading idea before committing to building a complete strategy is the logical approach because managing and exiting failed entries is not what you should be aiming for!",
|
||||
"updated": 1630376167390,
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Probar una idea trading antes de comprometerse a construir una estrategia completa es el enfoque lógico porque administrar y salir de las entradas fallidas no es lo que debería apuntar.",
|
||||
"updated": 1630376759318
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "This tutorial explains how to properly formulate a trading idea that may later be tested."
|
||||
"text": "This tutorial explains how to properly formulate a trading idea that may later be tested.",
|
||||
"updated": 1630376190150,
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Este tutorial explica cómo formular correctamente una idea trading que luego se puede probar.",
|
||||
"updated": 1630376776923
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
-5
@@ -4,19 +4,40 @@
|
||||
"type": "Tutorial Step - Before we start...",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Foundations",
|
||||
"name": "bullet-warning"
|
||||
"name": "Bullet\\bullet-warning",
|
||||
"project": "Foundations"
|
||||
},
|
||||
"text": "Let me give you the heads up on a few matters you should consider before we start!"
|
||||
"text": "Let me give you the heads up on a few matters you should consider before we start!",
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡Permítanme informarles sobre algunos asuntos que deben considerar antes de comenzar!",
|
||||
"updated": 1630376946171
|
||||
}
|
||||
]
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Take any trading-related information for what it's worth! When I share trading concepts, take them with a grain of salt! I'm just a tutorial, not your financial advisor! I'm here to teach you Superalgos, not to tell you how to trade! If you are not a trader, you may pick up something of value, but always make sure you do your own research!"
|
||||
"text": "Take any trading-related information for what it's worth! When I share trading concepts, take them with a grain of salt! I'm just a tutorial, not your financial advisor! I'm here to teach you Superalgos, not to tell you how to trade! If you are not a trader, you may pick up something of value, but always make sure you do your own research!",
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡Toma cualquier información relacionada con el comercio por lo que vale! Cuando comparta conceptos comerciales, ¡tómelos con un grano de sal! ¡Soy solo un tutorial, no su asesor financiero! ¡Estoy aquí para enseñarte Superalgos, no para decirte cómo comerciar! Si no es un comerciante, puede adquirir algo de valor, ¡pero asegúrese siempre de hacer su propia investigación!",
|
||||
"updated": 1630376997809
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "This tutorial is aimed at a wide audience! I'll take it easy and lay out concepts so that everyone may understand them. If you are a seasoned trader you may feel some explanations are too basic. In that case, feel free to skip this tutorial and go to the next one in the series."
|
||||
"text": "This tutorial is aimed at a wide audience! I'll take it easy and lay out concepts so that everyone may understand them. If you are a seasoned trader you may feel some explanations are too basic. In that case, feel free to skip this tutorial and go to the next one in the series.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
"text": " Me lo tomaré con calma y expondré conceptos para que todos puedan entenderlos. Si eres es un comerciante experimentado, puede sentir que algunas explicaciones son demasiado básicas. En ese caso, no dudes en omitir este tutorial y pasar al siguiente de la serie.",
|
||||
"updated": 1630377193083
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
+26
-5
@@ -4,19 +4,40 @@
|
||||
"type": "Tutorial Step - Ready to Mine..?",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Foundations",
|
||||
"name": "data-tasks"
|
||||
"name": "Data\\data-tasks",
|
||||
"project": "Foundations"
|
||||
},
|
||||
"text": "We'll mine some data to analyze a few events over the charts. We'll use the same data to test the trading idea in the next tutorial!"
|
||||
"text": "We'll mine some data to analyze a few events over the charts. We'll use the same data to test the trading idea in the next tutorial!",
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Extraeremos algunos datos para analizar algunos eventos en los gráficos. ¡Usaremos los mismos datos para probar la idea comercial en el próximo tutorial!",
|
||||
"updated": 1630377229613
|
||||
}
|
||||
]
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "The sensor bot will run on the BTC/USDT market (Binance) from January 1st, 2020, along with the following indicators from the Masters data mine: Candles Volumes, Bollinger Bands, and Bollinger Channels."
|
||||
"text": "The sensor bot will run on the BTC/USDT market (Binance) from January 1st, 2020, along with the following indicators from the Masters data mine: Candles Volumes, Bollinger Bands, and Bollinger Channels.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "El robot sensor se ejecutará en el mercado BTC / USDT (Binance) a partir del 1 de enero de 2020, junto con los siguientes indicadores de la mina de datos Masters: Candles Volumes, Bollinger Bands y Bollinger Channels.",
|
||||
"updated": 1630377249570
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Warning",
|
||||
"text": "If you have data on this market/exchange but on a different time range, this may affect your data! Read the sensor bot documentation to learn how! If the data you have is not important, feel free to keep going!"
|
||||
"text": "If you have data on this market/exchange but on a different time range, this may affect your data! Read the sensor bot documentation to learn how! If the data you have is not important, feel free to keep going!",
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Si tiene datos en este mercado / intercambio pero en un rango de tiempo diferente, ¡esto puede afectar tus datos! ¡Lee la documentación del robot sensor para aprender cómo hacerlo! Si los datos que tiene no son importantes, ¡no dude en continuar!",
|
||||
"updated": 1630377309627
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
+6
-5
@@ -4,7 +4,7 @@
|
||||
"type": "Tutorial Step - Broke Something?",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Foundations",
|
||||
"project": "Foundations",
|
||||
"name": "workspace"
|
||||
},
|
||||
"text": "If you ever break something—like deleting a node or changing a configuration—and don't know how to deal with the outcome...",
|
||||
@@ -81,14 +81,15 @@
|
||||
"updated": 1622634394712
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "Plugin Workspaces are first in the list, featuring a black background. Then comes the list of user workspaces, on a purple background.",
|
||||
"updated": 1622634460755,
|
||||
"style": "Success",
|
||||
"text": "Plugin Workspaces ship with the system. Let's see how you can make them your own, or create new workspaces!",
|
||||
"updated": 1629802595052,
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Plugin Workspaces son los primeros en la lista con un fondo negro. Luego viene la lista de espacios de trabajo de usuarios, sobre un fondo violeta.",
|
||||
"updated": 1624292101033
|
||||
"updated": 1624292101033,
|
||||
"style": "Note"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+9
-9
@@ -7,7 +7,7 @@
|
||||
"project": "Foundations",
|
||||
"name": "workspace"
|
||||
},
|
||||
"text": "Most are Plugin Workspaces shipping with the system! There should be one User Workspace at the end of the list too!",
|
||||
"text": "Plugin Workspaces shipping with the system feature a black background in the Workspaces Tab on the left.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "IT",
|
||||
@@ -28,13 +28,13 @@
|
||||
"style": "Definition"
|
||||
}
|
||||
],
|
||||
"updated": 1622193005692
|
||||
"updated": 1629803469668
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "As soon as you launched the UI for the first time, the Getting Started Tutorials Plugin Workspace was loaded. The Workspace was saved as a new User Workspace after 60 seconds in the My-Workspaces folder.",
|
||||
"updated": 1622193268470,
|
||||
"text": "Workspaces save all the information relative to the data structures that are included in the workspace.",
|
||||
"updated": 1629803440353,
|
||||
"translations": [
|
||||
{
|
||||
"language": "IT",
|
||||
@@ -57,9 +57,9 @@
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "The workspace is saved automatically every minute. It is also saved before closing the browser or browser tab, and you may save it manually using the Ctrl + Shift + Key-S",
|
||||
"updated": 1622634511330,
|
||||
"style": "Callout",
|
||||
"text": "Let's create a copy of this Plugin Workspace and make it your own! Hit the following key combination: Ctrl + Shift + Key-S",
|
||||
"updated": 1629803279820,
|
||||
"translations": [
|
||||
{
|
||||
"language": "ES",
|
||||
@@ -71,7 +71,7 @@
|
||||
},
|
||||
{
|
||||
"style": "Important",
|
||||
"text": "Changes is Plugins Workspaces don't persist in the plugin. They do in the User Workspace",
|
||||
"text": "Now open the Workspaces Tab on the left, scroll to the bottom, and find the only workspace with a purple background! That's your workspace! But no need to click on it!",
|
||||
"translations": [
|
||||
{
|
||||
"language": "IT",
|
||||
@@ -92,7 +92,7 @@
|
||||
"style": "Important"
|
||||
}
|
||||
],
|
||||
"updated": 1622193520113
|
||||
"updated": 1629803460646
|
||||
}
|
||||
]
|
||||
}
|
||||
+12
-7
@@ -4,7 +4,7 @@
|
||||
"type": "Tutorial Step - Aim High, Trade Big!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Foundations",
|
||||
"project": "Foundations",
|
||||
"name": "network-node"
|
||||
},
|
||||
"text": "Picture an army of bots working with multiple exchanges, markets, and strategies, running on a network <i>à la</i> trading farm.",
|
||||
@@ -18,7 +18,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Imagínate un ejército de bots trabajando con múltiples exchanges, mercados y estrategias, ejecutándose en una red al estilo de una granja trading.",
|
||||
"updated": 1624415133666
|
||||
"updated": 1624415133666,
|
||||
"style": "Definition"
|
||||
}
|
||||
],
|
||||
"updated": 1622200549490
|
||||
@@ -38,7 +39,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "De eso se trata el nodo Network. Lo que haz visto hasta ahora se ejecuta en una sola máquina. Pero...",
|
||||
"updated": 1624415210197
|
||||
"updated": 1624415210197,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -56,13 +58,14 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡Superalgos soporta la distribución y coordinación de tareas a través de redes de nodos que ejecutan el Client! Esto permite operaciones inteligentes y escalables. ¡Cualquier máquina que ejecute la GUI puede controlar el trabajo!",
|
||||
"updated": 1624415389550
|
||||
"updated": 1624415389550,
|
||||
"style": "Callout"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "You may set up a network with a few Raspberry Pi, an industrial-grade datacenter—or anything in between.",
|
||||
"text": "You may set up a network with a few Raspberry Pi, an industrial-grade datacenter, or anything in between.",
|
||||
"translations": [
|
||||
{
|
||||
"language": "IT",
|
||||
@@ -73,9 +76,11 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Puede configurar una red con algunos Raspberry Pi, un centro de datos de grado industrial o cualquier cosa entre medio.",
|
||||
"updated": 1624415501921
|
||||
"updated": 1624415501921,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
],
|
||||
"updated": 1629821982211
|
||||
}
|
||||
]
|
||||
}
|
||||
+2
-2
@@ -65,8 +65,8 @@
|
||||
},
|
||||
{
|
||||
"style": "Success",
|
||||
"text": "After doing the first few tutorials, take a look at the Machine Learning Demo Plugin Workspace!",
|
||||
"updated": 1616693444144,
|
||||
"text": "Later on, take a look at the ML CrossCategoricalEntropy Demo Plugin Workspace!",
|
||||
"updated": 1629825698628,
|
||||
"translations": [
|
||||
{
|
||||
"language": "IT",
|
||||
|
||||
+11
-7
@@ -4,7 +4,7 @@
|
||||
"type": "Tutorial Step - Ready. Set. Go!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
"project": "Foundations",
|
||||
"project": "Foundations",
|
||||
"name": "task"
|
||||
},
|
||||
"text": "Let's get going! This is going to be quick anyway, as we are testing a single day worth of historic data.",
|
||||
@@ -18,7 +18,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡Vámonos! De todos modos, esto será rápido, ya que estamos probando datos históricos de un solo día.",
|
||||
"updated": 1624453945775
|
||||
"updated": 1624453945775,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -36,14 +37,15 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Ejecutar un Trading Task es bastante similar a ejecutar una tarea de minería de datos. La diferencia radica en que, después de ejecutar la tarea, también debe ejecutar lel Trading Session.",
|
||||
"updated": 1624454018479
|
||||
"updated": 1624454018479,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Select Run on the Task menu!<br/><br/>Now select Run on the Backtesting Session menu!",
|
||||
"updated": 1616428472102,
|
||||
"text": "Select Run on the Lightning Strike Task menu!</br></br>Now select Run on the Backtesting Session menu!",
|
||||
"updated": 1629823345596,
|
||||
"translations": [
|
||||
{
|
||||
"language": "IT",
|
||||
@@ -54,7 +56,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Seleccione Run en el Task menu! Ahora seleccione Run en el Backtesting Session menu!",
|
||||
"updated": 1624454082709
|
||||
"updated": 1624454082709,
|
||||
"style": "Callout"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -71,7 +74,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Cuando el Backtesting Session indica que terminó el procesamiento, detenga el Task y haz clic en Next.",
|
||||
"updated": 1624454207659
|
||||
"updated": 1624454207659,
|
||||
"style": "Note"
|
||||
}
|
||||
],
|
||||
"updated": 1622201246283
|
||||
|
||||
+2
-2
@@ -27,8 +27,8 @@
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Callout",
|
||||
"text": "Acess the configuration and carefully enter the API Pubilic Key and the API secret key.",
|
||||
"updated": 1616435074225,
|
||||
"text": "Access the configuration and carefully enter the API Pubilic Key and the API secret key.",
|
||||
"updated": 1629832804513,
|
||||
"translations": [
|
||||
{
|
||||
"language": "IT",
|
||||
|
||||
+9
-6
@@ -5,7 +5,7 @@
|
||||
"definition": {
|
||||
"icon": {
|
||||
"name": "help",
|
||||
"project": "Foundations"
|
||||
"project": "Foundations"
|
||||
},
|
||||
"text": "There are tons of things we haven't covered yet, I know! Just look around! So much stuff to see! It's mind-boggling.",
|
||||
"translations": [
|
||||
@@ -18,15 +18,16 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Hay toneladas de cosas que aún no hemos cubierto, ¡lo sé! ¡Solo mire alrededor! ¡Tantas cosas para ver! Es alucinante.",
|
||||
"updated": 1624485720195
|
||||
"updated": 1624485720195,
|
||||
"style": "Definition"
|
||||
}
|
||||
]
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "Text",
|
||||
"text": "I'm sure you still have tons of questions floating in your head... How do I build my own strategies? How do I measure performance? How do I build an indicator? How do I deploy a trading farm? How may I integrate with TradingView? How do I set up Telegram announcements?",
|
||||
"updated": 1610711099627,
|
||||
"text": "I'm sure you still have tons of questions floating in your head... How do I build my own strategies? How do I measure performance? How do I build an indicator? How do I deploy a trading farm? How may I integrate with TradingView? How do I set up Telegram announcements? How do I fetch data from other APIs?",
|
||||
"updated": 1629833033808,
|
||||
"translations": [
|
||||
{
|
||||
"language": "IT",
|
||||
@@ -37,7 +38,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "Estoy seguro de que todavía tienes toneladas de preguntas flotando en tu cabeza ... ¿Cómo creo mis propias estrategias? ¿Cómo mido el desempeño? ¿Cómo construyo un indicador? ¿Cómo implemento un Trading Farm? ¿Cómo puedo integrarme con TradingView? ¿Cómo configuro los anuncios de Telegram?",
|
||||
"updated": 1624485819701
|
||||
"updated": 1624485819701,
|
||||
"style": "Text"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -55,7 +57,8 @@
|
||||
{
|
||||
"language": "ES",
|
||||
"text": "¡No te preocupes! ¡Llegarás, amigo mío! ¡Hay más tutoriales y mucho material de lectura disponible! ¡Quizás sea una buena idea darle un vistazo rápido al sistema de documentación integrado antes de despedirme!",
|
||||
"updated": 1624485842059
|
||||
"updated": 1624485842059,
|
||||
"style": "Success"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
+35
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"tutorial": "Welcome to Superalgos!",
|
||||
"pageNumber": "115",
|
||||
"type": "Tutorial Step - About our Governance",
|
||||
"definition": {
|
||||
"text": "Before I leave you with the next tutorial, you must know that Superalgos is a crypto project with distributed governance!",
|
||||
"icon": {
|
||||
"name": "\\governance-project",
|
||||
"project": "Governance"
|
||||
},
|
||||
"updated": 1629835261024
|
||||
},
|
||||
"paragraphs": [
|
||||
{
|
||||
"style": "List",
|
||||
"text": "You may earn Superalgos SA Tokens and Reputation by contributing to the project.",
|
||||
"updated": 1630065210887
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Then you may leverage your tokens and reputation to participate in Governance Programs.",
|
||||
"updated": 1629834501563
|
||||
},
|
||||
{
|
||||
"style": "List",
|
||||
"text": "Participating in governance earns you more tokens, as helping direct the project is an important contribution in and of itself!",
|
||||
"updated": 1629834600057
|
||||
},
|
||||
{
|
||||
"style": "Note",
|
||||
"text": "You may earn your first few tokens with the Airdrops Program just by setting up your User Profile. But before you do that, you need to do a couple more tutorials to complete your education!",
|
||||
"updated": 1629835202298
|
||||
}
|
||||
]
|
||||
}
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"tutorial": "Welcome to Superalgos!",
|
||||
"pageNumber": 115,
|
||||
"pageNumber": 116,
|
||||
"type": "Tutorial Step - My Only Friend, The End!",
|
||||
"definition": {
|
||||
"icon": {
|
||||
+1
-1
@@ -73,7 +73,7 @@ exports.newFoundationsBotModulesLearningEpisode = function (processIndex) {
|
||||
}
|
||||
|
||||
function resetEpisode() {
|
||||
TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.initializeNode(learningEngine.learningCurrent.learningEpisode)
|
||||
TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).LEARNING_ENGINE_MODULE_OBJECT.initializeNode(learningEngine.learningCurrent.learningEpisode)
|
||||
}
|
||||
|
||||
function updateEnds() {
|
||||
|
||||
+1
-2
@@ -73,5 +73,4 @@ exports.newFoundationsBotModulesLearningOutput = function (processIndex) {
|
||||
throw (TS.projects.foundations.globals.standardResponses.DEFAULT_FAIL_RESPONSE)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+4
-4
@@ -16,7 +16,7 @@
|
||||
|
||||
let dataFiles = new Map()
|
||||
let multiTimeFrameDataFiles = new Map()
|
||||
TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT = TS.projects.foundations.botModules.learningEngine.newFoundationsBotModulesLearningEngine(processIndex)
|
||||
TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).LEARNING_ENGINE_MODULE_OBJECT = TS.projects.foundations.botModules.learningEngine.newFoundationsBotModulesLearningEngine(processIndex)
|
||||
let learningOutputModuleObject = TS.projects.foundations.botModules.learningOutput.newFoundationsBotModulesLearningOutput(processIndex)
|
||||
|
||||
let currentTimeFrame = {}
|
||||
@@ -46,12 +46,12 @@
|
||||
}
|
||||
|
||||
/* We set up the Learning Engine Module. */
|
||||
TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.initialize()
|
||||
TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).LEARNING_ENGINE_MODULE_OBJECT.initialize()
|
||||
|
||||
/* Initializing the Learning Process Date */
|
||||
if (TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).IS_SESSION_FIRST_LOOP === true && TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).IS_SESSION_RESUMING === false) {
|
||||
/*
|
||||
This function is going to be called many times by the Learning Bot Loop.
|
||||
This funcion is going to be called many times by the Learning Bot Loop.
|
||||
Only during the first execution and when the User is not resuming the execution
|
||||
of a stopped session / task; we are going to initialize the Process Date Time.
|
||||
This variable tell us which day we are standing at, specially while working
|
||||
@@ -65,7 +65,7 @@
|
||||
This is the Date that is going to be used across the execution of this Learning Process.
|
||||
We need this because it has a different life cycle than the processData stored at the
|
||||
Learning Engine data structure. This date has to remain the same during the whole execution
|
||||
of the Learning Process until the end, inclusind the writing of Data Ranges and Status Reports.
|
||||
of the Learning Process until the end, inclusind the writting of Data Ranges and Status Reports.
|
||||
The processDate of the Learning Engine data structure on the other hand can be changed during
|
||||
the simulation loop, once we discover that all candles from a certain date have benn processed.
|
||||
Here is the point where we sync one and the other.
|
||||
|
||||
+16
-38
@@ -1,6 +1,6 @@
|
||||
exports.newFoundationsBotModulesLearningSimulation = function (processIndex) {
|
||||
/*
|
||||
This Module represents the learning simulacion. Escentially a loop through a set of candles and
|
||||
This Module represents the learning simulation. Essentially a loop through a set of candles and
|
||||
the execution at each loop cycle of the Learning System Protocol.
|
||||
*/
|
||||
const MODULE_NAME = 'Learning Simulation -> ' + TS.projects.foundations.globals.taskConstants.TASK_NODE.bot.processes[processIndex].session.name
|
||||
@@ -23,7 +23,6 @@ exports.newFoundationsBotModulesLearningSimulation = function (processIndex) {
|
||||
writeFiles,
|
||||
) {
|
||||
try {
|
||||
|
||||
let learningSystem = TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.learningSystem
|
||||
let learningEngine = TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.learningEngine
|
||||
let sessionParameters = TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.learningParameters
|
||||
@@ -67,7 +66,7 @@ exports.newFoundationsBotModulesLearningSimulation = function (processIndex) {
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
Form Market Files, we are only going to load the model from this and continue the
|
||||
For Market Files, we are only going to load the model from this and continue the
|
||||
training it already has when the user resumes the training session. If the user
|
||||
runs the training session, we will not load from disk, but create a new empty model
|
||||
instead.
|
||||
@@ -169,14 +168,15 @@ exports.newFoundationsBotModulesLearningSimulation = function (processIndex) {
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
'[INFO] runSimulation -> loop -> Candle End @ ' + (new Date(candle.end)).toUTCString())
|
||||
|
||||
TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.setCurrentCandle(candle) // We move the current candle we are standing at, to the learning engine data structure to make it available to anyone, including conditions and formulas.
|
||||
TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).LEARNING_ENGINE_MODULE_OBJECT.setCurrentCandle(candle) // We move the current candle we are standing at, to the learning engine data structure to make it available to anyone, including conditions and formulas.
|
||||
|
||||
/* We emit a heart beat so that the UI can now where we are at the overal process.*/
|
||||
/* We emit a heart beat so that the UI can know where we are at the overall process. */
|
||||
heartBeat()
|
||||
|
||||
/* Opening the Episode, if needed. */
|
||||
learningEpisodeModuleObject.openEpisode()
|
||||
|
||||
|
||||
// Skipping current loop if we are before initial candle:
|
||||
if (checkInitialDatetime() === false) {
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
'[INFO] runSimulation -> loop -> Candle Before the Initia Date Time @ ' + (new Date(candle.begin)).toUTCString())
|
||||
@@ -197,26 +197,17 @@ exports.newFoundationsBotModulesLearningSimulation = function (processIndex) {
|
||||
Episode Counters and Statistics update. Mantaince is done
|
||||
once per simulation candle.
|
||||
*/
|
||||
learningSystemModuleObject.mantain()
|
||||
learningSystemModuleObject.mantain() /* ***NOTE*** Currently empty */
|
||||
learningEpisodeModuleObject.mantain()
|
||||
TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.mantain()
|
||||
TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).LEARNING_ENGINE_MODULE_OBJECT.mantain()
|
||||
|
||||
/*
|
||||
Run the first cycle of the Learning System. In this first cycle we
|
||||
give some room so that orders can be canceled or filled and we can
|
||||
write those records into the output memory. During this cycle new
|
||||
orders can not be created, since otherwise the could be cancelled at
|
||||
the second cycle without spending real time at the order book.
|
||||
*/
|
||||
TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.setCurrentCycle('First')
|
||||
/* Run the Learning System: */
|
||||
TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).LEARNING_ENGINE_MODULE_OBJECT.setCurrentCycle('First')
|
||||
await runCycle()
|
||||
|
||||
/*
|
||||
We check if we need to stop before appending the records so that the stop
|
||||
reason is also propery recorded. Note also that we check this after the first
|
||||
cycle, where orders have not been submitted to the exchange yet, but we
|
||||
had the chance to check for the status of placed orders or even cancel
|
||||
the ones that needed cancellation.
|
||||
reason is also properly recorded.
|
||||
*/
|
||||
checkIfWeNeedToStopBetweenCycles()
|
||||
|
||||
@@ -224,29 +215,17 @@ exports.newFoundationsBotModulesLearningSimulation = function (processIndex) {
|
||||
learningRecordsModuleObject.appendRecords()
|
||||
|
||||
if (breakLoop === true) { break }
|
||||
/*
|
||||
Run the second cycle of the Learning System. During this second run
|
||||
some new orders might be created at slots freed up during the first
|
||||
run. This allows for example for a Limit Order to be cancelled during the
|
||||
first run, and the same Limit Order definition to spawn a new order
|
||||
without the need to wait until the next candle. Orders can not be cancelled
|
||||
during the second cycle.
|
||||
*/
|
||||
TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.setCurrentCycle('Second')
|
||||
await runCycle()
|
||||
|
||||
checkIfWeNeedToStopAfterBothCycles()
|
||||
|
||||
/* Add new records to the process output */
|
||||
learningRecordsModuleObject.appendRecords()
|
||||
|
||||
if (breakLoop === true) { break }
|
||||
|
||||
|
||||
async function runCycle() {
|
||||
/* Reset Data Structures */
|
||||
learningSystemModuleObject.reset()
|
||||
learningEpisodeModuleObject.reset()
|
||||
TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).TRADING_ENGINE_MODULE_OBJECT.reset()
|
||||
TS.projects.foundations.globals.processModuleObjects.MODULE_OBJECTS_BY_PROCESS_INDEX_MAP.get(processIndex).LEARNING_ENGINE_MODULE_OBJECT.reset()
|
||||
|
||||
let infoMessage = 'Processing candle # ' + learningEngine.learningCurrent.learningEpisode.candle.index.value + ' @ the ' + learningEngine.learningCurrent.learningEpisode.cycle.value + ' cycle.'
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
@@ -342,7 +321,7 @@ exports.newFoundationsBotModulesLearningSimulation = function (processIndex) {
|
||||
let currentDate = new Date(heartBeatDate)
|
||||
let percentage = TS.projects.foundations.utilities.dateTimeFunctions.getPercentage(fromDate, currentDate, lastDate)
|
||||
/*
|
||||
Theere are a few tasks that we need to do only when the date changes,
|
||||
There are a few tasks that we need to do only when the date changes,
|
||||
otherwise it would be suboptimal.
|
||||
*/
|
||||
if (heartBeatDate.valueOf() !== previousHeartBeatDate) {
|
||||
@@ -367,7 +346,7 @@ exports.newFoundationsBotModulesLearningSimulation = function (processIndex) {
|
||||
}
|
||||
|
||||
/*
|
||||
When the Candle Index nees to be shown, then we can not send the hearbet
|
||||
When the Candle Index needs to be shown, then we can not send the heartbeat
|
||||
only when the dates changes, we have to send it for every candle.
|
||||
It might also contain the date information.
|
||||
*/
|
||||
@@ -586,5 +565,4 @@ exports.newFoundationsBotModulesLearningSimulation = function (processIndex) {
|
||||
throw (TS.projects.foundations.globals.standardResponses.DEFAULT_FAIL_RESPONSE)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+5
-6
@@ -115,8 +115,8 @@ exports.newFoundationsBotModulesLearningSystem = function (processIndex) {
|
||||
We will scan the project schema until we find the machine learning library
|
||||
defined by the user at the UI.
|
||||
*/
|
||||
for (let i = 0; i < TS.projects.foundations.globals.taskConstants.PROJECTS_SCHEMA.length; i++) {
|
||||
let projectSchemaProject = TS.projects.foundations.globals.taskConstants.PROJECTS_SCHEMA[i]
|
||||
for (let i = 0; i < PROJECTS_SCHEMA.length; i++) {
|
||||
let projectSchemaProject = PROJECTS_SCHEMA[i]
|
||||
if (projectSchemaProject.name !== machineLearningLibrary.project) { continue }
|
||||
|
||||
for (let j = 0; j < projectSchemaProject.TS.botModules.length; j++) {
|
||||
@@ -241,7 +241,7 @@ exports.newFoundationsBotModulesLearningSystem = function (processIndex) {
|
||||
async function run() {
|
||||
try {
|
||||
/* Dynamic Indicators */
|
||||
buildDynamicIndicators()
|
||||
// buildDynamicIndicators() /* ***NOTE*** Would need to be implemented. */
|
||||
|
||||
/*
|
||||
Initialize the Learning Algorithm
|
||||
@@ -274,7 +274,7 @@ exports.newFoundationsBotModulesLearningSystem = function (processIndex) {
|
||||
}
|
||||
|
||||
/* Here we check if there is a codition to be evaluated */
|
||||
if (node.type === 'Condition' && evaluating === 'Conditions') {
|
||||
if ((node.type === 'Condition' || node.type === 'Collection Condition') && evaluating === 'Conditions') {
|
||||
/* We will eval this condition */
|
||||
if (isDescendent === true) {
|
||||
evalCondition(node)
|
||||
@@ -428,5 +428,4 @@ exports.newFoundationsBotModulesLearningSystem = function (processIndex) {
|
||||
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[INFO] evalFormula -> value = ' + value)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -38,7 +38,7 @@ exports.newFoundationsBotModulesCheckWebhook = function (processIndex) {
|
||||
|
||||
function getContextVariables(callBack) {
|
||||
try {
|
||||
let reportKey = "Masters" + "-" + "Webhooks" + "-" + "Check-Webhook"
|
||||
let reportKey = "Webhooks" + "-" + "Webhooks" + "-" + "Check-Webhook"
|
||||
|
||||
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME,
|
||||
"[INFO] start -> getContextVariables -> reportKey = " + reportKey)
|
||||
|
||||
@@ -32,8 +32,8 @@ exports.newFoundationsFunctionLibrariesTaskFunctions = function () {
|
||||
We will scan the project schema until we find the module that will run the bot
|
||||
botModule with the name provided.
|
||||
*/
|
||||
for (let i = 0; i < TS.projects.foundations.globals.taskConstants.PROJECTS_SCHEMA.length; i++) {
|
||||
let project = TS.projects.foundations.globals.taskConstants.PROJECTS_SCHEMA[i]
|
||||
for (let i = 0; i < PROJECTS_SCHEMA.length; i++) {
|
||||
let project = PROJECTS_SCHEMA[i]
|
||||
if (project.name !== TS.projects.foundations.globals.taskConstants.PROJECT_DEFINITION_NODE.config.codeName) { continue }
|
||||
for (let j = 0; j < project.TS.botModules.length; j++) {
|
||||
botModuleDefinition = project.TS.botModules[j]
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
host = 'localhost'
|
||||
}
|
||||
if (port === undefined) {
|
||||
port = global.env.WEB_SOCKETS_INTERFACE_PORT
|
||||
port = global.env.CLIENT_WEB_SOCKETS_INTERFACE_PORT
|
||||
}
|
||||
|
||||
let messageCounter = 0
|
||||
|
||||
Loaded 100 of 431 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user