Merge branch 'develop' of https://github.com/Superalgos/Superalgos into develop
No files matched your search
@@ -4,6 +4,7 @@ exports.newGithubServer = function newGithubServer() {
|
||||
getGithubStars: getGithubStars,
|
||||
getGithubWatchers: getGithubWatchers,
|
||||
getGithubForks: getGithubForks,
|
||||
createGithubFork: createGithubFork,
|
||||
mergePullRequests: mergePullRequests,
|
||||
initialize: initialize,
|
||||
finalize: finalize,
|
||||
@@ -162,6 +163,49 @@ exports.newGithubServer = function newGithubServer() {
|
||||
}
|
||||
}
|
||||
|
||||
async function createGithubFork(repository, username, token) {
|
||||
try {
|
||||
username = unescape(username)
|
||||
token = unescape(token)
|
||||
|
||||
await doGithub()
|
||||
|
||||
async function doGithub() {
|
||||
try {
|
||||
//const repo = 'Superalgos'
|
||||
//const owner = username
|
||||
const { Octokit } = SA.nodeModules.octokit
|
||||
const octokit = new Octokit({
|
||||
auth: token,
|
||||
userAgent: 'Superalgos ' + SA.version
|
||||
})
|
||||
|
||||
await octokit.repos.createFork({
|
||||
owner: 'Superalgos',
|
||||
repo: 'Superalgos'
|
||||
})
|
||||
} catch (err) {
|
||||
if (err === undefined) { return }
|
||||
console.log('[ERROR] Github Server -> createGithubFork -> doGithub -> err.stack = ' + err.stack)
|
||||
}
|
||||
}
|
||||
} catch (err) {
|
||||
console.log('[ERROR] Github Server -> createGithubFork -> Method call produced an error.')
|
||||
console.log('[ERROR] Github Server -> createGithubFork -> err.stack = ' + err.stack)
|
||||
console.log('[ERROR] Github Server -> createGithubFork -> repository = ' + repository)
|
||||
console.log('[ERROR] Github Server -> createGithubFork -> username = ' + username)
|
||||
console.log('[ERROR] Github Server -> createGithubFork -> token starts with = ' + token.substring(0, 10) + '...')
|
||||
console.log('[ERROR] Github Server -> createGithubFork -> token ends with = ' + '...' + token.substring(token.length - 10))
|
||||
|
||||
let error = {
|
||||
result: 'Fail Because',
|
||||
message: err.message,
|
||||
stack: err.stack
|
||||
}
|
||||
return error
|
||||
}
|
||||
}
|
||||
|
||||
async function mergeGithubPullRequests(commitMessage, username, token) {
|
||||
try {
|
||||
commitMessage = unescape(commitMessage)
|
||||
|
||||
@@ -1161,7 +1161,7 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
try {
|
||||
console.log('fixSchemas...' + allAppSchemas.length)
|
||||
let projects = SA.projects.foundations.utilities.filesAndDirectories.getDirectories(global.env.PATH_TO_PROJECTS)
|
||||
const fs = SA.nodeModules.fs
|
||||
//const fs = SA.nodeModules.fs
|
||||
let needFixing = 0
|
||||
for (let i = 0; i < allAppSchemas.length; i++) {
|
||||
let schemaDocument = allAppSchemas[i]
|
||||
@@ -1209,13 +1209,13 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
}
|
||||
}
|
||||
|
||||
if (wasUpdated === true) {
|
||||
let fileContent = JSON.stringify(schemaDocument, undefined, 4)
|
||||
let filePath = allAppSchemasFilePaths[i]
|
||||
//if (wasUpdated === true) {
|
||||
//let fileContent = JSON.stringify(schemaDocument, undefined, 4)
|
||||
//let filePath = allAppSchemasFilePaths[i]
|
||||
//console.log('Saving File at ' + filePath)
|
||||
//console.log(fileContent)
|
||||
//fs.writeFileSync(filePath, fileContent)
|
||||
}
|
||||
//}
|
||||
}
|
||||
} catch (err) {
|
||||
console.log(err.stack)
|
||||
@@ -1312,6 +1312,17 @@ exports.newHttpInterface = function newHttpInterface() {
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(serverResponse), httpResponse)
|
||||
return
|
||||
}
|
||||
case 'createGithubFork': {
|
||||
|
||||
let serverResponse = await PL.servers.GITHUB_SERVER.createGithubFork(
|
||||
params.repository,
|
||||
params.username,
|
||||
params.token
|
||||
)
|
||||
|
||||
SA.projects.foundations.utilities.httpResponses.respondWithContent(JSON.stringify(serverResponse), httpResponse)
|
||||
return
|
||||
}
|
||||
case 'mergePullRequests': {
|
||||
|
||||
let serverResponse = await PL.servers.GITHUB_SERVER.mergePullRequests(
|
||||
|
||||
@@ -9,6 +9,16 @@
|
||||
"actionProject": "Visual-Scripting",
|
||||
"relatedUiObjectProject": "Foundations"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "socialTradingBotReference",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Social Trading Bot Reference",
|
||||
"relatedUiObject": "Social Trading Bot Reference",
|
||||
"relatedUiObjectProject": "Governance"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
@@ -31,6 +41,12 @@
|
||||
"type": "array",
|
||||
"childType": "Trading Process Instance",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "socialTradingBotReference",
|
||||
"type": "node",
|
||||
"childType": "Social Trading Bot Reference",
|
||||
"autoAdd": false
|
||||
}
|
||||
],
|
||||
"propertyNameAtParent": "bot"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
"language": "ES",
|
||||
"text": "El close stage se ocupa de las definiciones que componen la lógica para cerrar una posición, incluida la tasa y el tamaño objetivo, y la ejecución de la orden.",
|
||||
"updated": 1624460574874
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Статия закрытия имеет дело с определениями, которые составляют логику закрытия позиции, включая целевую ставку и размер, а также исполнение ордера.",
|
||||
"updated": 1637757567864
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
"language": "ES",
|
||||
"text": "Conditions son reglas dentro de una situación. Cuando todas las condiciones de una situación se validan como verdaderas, la situación también se valida y se activa el evento asociado.",
|
||||
"updated": 1624459710047
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Условия - это правила внутри ситуации. Когда все условия в ситуации проверяются на истинность, ситуация также проверяется, и запускается соответствующее событие.\n",
|
||||
"updated": 1637756827569
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
"language": "ES",
|
||||
"text": "Un execution algorithmes es un conjunto de instrucciones que se utilizan para realizar y gestionar pedidos en el exchange.",
|
||||
"updated": 1624459612098
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Алгоритм выполнения - это набор инструкций, используемых для размещения и управления ордерами на бирже.",
|
||||
"updated": 1637756233547
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
"language": "ES",
|
||||
"text": "Una fórmula es una expresión matemática destinada a determinar un valor numérico que se aplicará dinámicamente a una determinada propiedad.",
|
||||
"updated": 1624460095928
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Формула - это математическое выражение, предназначенное для определения числового значения, которое будет динамически применяться к определенному свойству.",
|
||||
"updated": 1637757255574
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
"language": "ES",
|
||||
"text": "El open stage se ocupa de las definiciones que componen la lógica para ingresar a una posición, incluida la tasa y el tamaño objetivo, y la ejecución de la orden.",
|
||||
"updated": 1624459561011
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "На открытой стадии рассматриваются определения, которые составляют логику входа в позицию, включая целевую ставку и размер, а также выполнение ордеров.",
|
||||
"updated": 1637756161148
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
"language": "ES",
|
||||
"text": "El nodo order rate define la tasa de órdenes límite.",
|
||||
"updated": 1624459989822
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Узел скорости заказов определяет скорость лимитных ордеров.",
|
||||
"updated": 1637757390733
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
"language": "ES",
|
||||
"text": "Un situation se refiere a un estado específico del mercado en el que debe tener lugar un determinado evento, definido por una serie de condiciones.",
|
||||
"updated": 1624496155342
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Ситуация относится к определенному состоянию, в котором должно произойти определенное событие, поределяемое любым количеством условий.",
|
||||
"updated": 1637756401865
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
"language": "ES",
|
||||
"text": "El trigger stage se ocupa del seguimiento del mercado en busca de oportunidades de trading con la estrategia correspondiente.",
|
||||
"updated": 1624459676185
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Стадия запуска занимается мониторингом рынка в поисках торговых возможностей с соответствующей стратегией.",
|
||||
"updated": 1637756311221
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
@@ -30,6 +30,11 @@
|
||||
"language": "TR",
|
||||
"text": "Artık göstergenin nasıl çalıştığını bildiğinize göre, satın alma siparişleri ile destek seviyeleri arasındaki ilişkiyi bulabilir misiniz?",
|
||||
"updated": 1636205670836
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Теперь, когда Вы знаете, как работает индикатор, можете ли Вы найти взаимосвязь между ордерами на покупку и уровнями поддержки?",
|
||||
"updated": 1637754997019
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -59,6 +64,11 @@
|
||||
"language": "TR",
|
||||
"text": "Destek seviyelerinin Limitli Alış Emri oranını nasıl belirlediğine dair ipuçlarını aramak ve test edilen süreyi keşfetmek için biraz zaman ayırın!",
|
||||
"updated": 1636206011307
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Потратьте некоторое время на изучение проверенного периода времени в поисках подсказок о том, как уровни поддержки определяют скорость Limit Buy Order!",
|
||||
"updated": 1637755087157
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -87,6 +97,11 @@
|
||||
"language": "TR",
|
||||
"text": "Fiyat yön değiştirdiğinde yeni seviyelerin nasıl oluştuğunu ve fiyat sıçradığında yerleşik bir seviyenin nasıl renk değiştirdiğini fark etmek eğlencelidir.",
|
||||
"updated": 1636206057671
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Забавно наблюдать, как формируются новые уровни, когда цена меняет направление и как установленный уровень меняет цвет, когда цена отскакивает от него.",
|
||||
"updated": 1637755157171
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -115,6 +130,11 @@
|
||||
"language": "TR",
|
||||
"text": "Ancak işin püf noktası, sıranın üzerindeki seviyeleri saymakta yatar!",
|
||||
"updated": 1636206075760
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Однако хитрость заключается в подсчете уровней выше порядка!",
|
||||
"updated": 1637755186829
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -30,6 +30,11 @@
|
||||
"language": "TR",
|
||||
"text": "Trading Bot 'u, Limit Satın Alma Emri'ni ( Limit Buy Order ) dördüncü destek seviyesine yerleştirir! Bunun arkasındaki mantık nedir?",
|
||||
"updated": 1636206183071
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Вы поняли? Trading Bot размещает Limit Buy Order на четвертом уровне поддержки! Какая логика стоит за этим? ",
|
||||
"updated": 1637755292494
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -59,6 +64,11 @@
|
||||
"language": "TR",
|
||||
"text": "Bu biraz keyfi bir durumdur, ancak strateji, düşen bıçağı (fiyatın ani düşüşünü), tek bir dakika içinde en az üç destek seviyesini aşabilen ve dördüncü seviyeye ulaşabilen fiyat hareketi olarak tanımlar. İstatistiksel olarak, bu tür olaylar - bu zaman çerçevesinde - sürekli daha fazla sıçrama üretir. Emir defterindeki alış/satış farkını geçici olarak artıran büyük piyasa emirlerinden kaynaklanabilirler.",
|
||||
"updated": 1636206270568
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Это происходит произвольно, но стратегия определяет падающий нож как ценовое действие, способное пробить, по крайней мере, три уровня поддержки, и добраться до четвертого в течение одной минуты. По статистике, подобные явления - в этот период времени - производят больше отскоков, чем продолжений. Они могут быть вызваны крупными рыночными ордерами, которые временно увеличивают спрос/предложение в книге заказов.",
|
||||
"updated": 1637755586430
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -87,6 +97,11 @@
|
||||
"language": "TR",
|
||||
"text": "Satın alma siparişlerinin dördüncü destek seviyesinde verildiğini doğrulamak için bir dakikanızı ayırın!",
|
||||
"updated": 1636206291919
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Потратьте минуту, чтобы убедиться, что заказы на покупку размещены на четвертом уровне поддержки!",
|
||||
"updated": 1637755660080
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -30,6 +30,11 @@
|
||||
"language": "TR",
|
||||
"text": "Sizi grafiklerden uzaklaştırdığım için özür dilerim ama sizi biriyle tanıştırmak istedim: satın alma siparişlerini veren kişi sağdaki adam!",
|
||||
"updated": 1636206465488
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Извините, что оторвал Вас от графиков, но я хотел представить Вам кое-кого: парень справа - это тот, кто размещает заказы на покупку!",
|
||||
"updated": 1637755743535
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -59,6 +64,11 @@
|
||||
"language": "TR",
|
||||
"text": "Lightning Strike Trading Sisteminin ( Trading System ), Open Stage tanımları içerisindeyiz. Bu aşamada, Tetik Aşamasında pozisyon alma kararı verildikten sonra Yürütme Algoritması ( Execution Algorithm ) devreye girer. Hala bir Durum ( Situation ) veya Koşulun ( Condition ) ne olduğunu bilmediğini biliyorum, ama yine de bir şeyler yapmanı istiyorum...",
|
||||
"updated": 1636207188259
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Мы находимся внутри Trading System - Lightning Strike - в рамках определений Open Stage. На этом этапе Execution Algorithm вступает в силу после того, как решение занять позицию уже было приянто на Trigger Stage. Я знаю, что Вы еще не знаете, что такое Situation или Condition, но я все равно бы хотел, чтобы Вы что-нибудь сделали...",
|
||||
"updated": 1637756027374
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -87,6 +97,11 @@
|
||||
"language": "TR",
|
||||
"text": "Yürütme algoritmasının altındaki düğümleri keşfetmek için birkaç dakikanızı ayırın, formülleri ve koşulları kontrol edin ve bunlardan neler yapabileceğinizi görün!",
|
||||
"updated": 1636207209256
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Потратьте несколько минут на изучение узлов под алгоритмом выполнения, проверьте формулы и условия и посмотрите, что Вы можете из них сделать!",
|
||||
"updated": 1637756059992
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -30,6 +30,11 @@
|
||||
"language": "TR",
|
||||
"text": "Bu adım her dakika verilen ve iptal edilen Limitli Alış Emrinin (Limit Buy Order ) tanımıdır.",
|
||||
"updated": 1636208410014
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "То, что Вы только что прошли - это определение Limit Buy Order, который размещается и отменяется каждую минуту, пока не будет заполнен. ",
|
||||
"updated": 1637756921540
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -60,6 +65,11 @@
|
||||
"language": "TR",
|
||||
"text": "Bu, limit emrinin oranını belirleyen düğümdür. Dördüncü destek seviyesi oranında sipariş vermekle ilgili daha önce tartıştığımız şeyi hatırlıyor musunuz?",
|
||||
"updated": 1636207410235
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Это узел, который определяет скорость лимитного ордера. Помните, что мы обсуждали ранее о размещении заказа по ставке четвертого уровня поддержки?",
|
||||
"updated": 1637757006124
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -88,6 +98,11 @@
|
||||
"language": "TR",
|
||||
"text": "Sipariş Oranı ( Order Rate ) düğümünnün altındaki formüle ( Formula ) düğümüne gidin ve menüden Düzenle'ye (Edit) tıklayın.",
|
||||
"updated": 1636207530541
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Перейдите к Formula, прикрепленной к узлу Order Rate и нажмите Edit в меню.",
|
||||
"updated": 1637757201102
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -116,6 +131,11 @@
|
||||
"language": "TR",
|
||||
"text": "İşte... böyle yapılır! Gördüğünüz gibi, sözdizimi neredeyse kendi kendini açıklayıcıdır! Zaman çerçevesini (chart.at01min), göstergeyi ( Suport ) ve ilgili gösterge özelliğini ( support4rate ) tanımlamayı içerir.",
|
||||
"updated": 1636207760464
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Итак... как это происходит? Как Вы можете видеть, синтаксис практически не требует пояснений. Это включает в себя определение временных рамок, индикатор и соответствующее свойство индикатора.",
|
||||
"updated": 1637757425980
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -30,6 +30,11 @@
|
||||
"language": "TR",
|
||||
"text": "Artık Kapanış Aşamasındayız ( Close Stage ). Size yürütme algoritmaları hakkında başka bir örnekle daha fazla bilgi vermenin ilginç olacağını düşündüm.",
|
||||
"updated": 1636208526405
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Сейчас мы находимся на Close Stage. Я думал, что было бы интересно рассказать Вам больше об алгоритмах выполнения на другом примере.",
|
||||
"updated": 1637757485185
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -59,6 +64,11 @@
|
||||
"language": "TR",
|
||||
"text": "Bir Yürütme Algoritması ( Execution Algorithm ), her türden birden fazla siparişi işleyebilir. Bu durumda çoklu limit satış emirleri tanımlanır.",
|
||||
"updated": 1636208571976
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Execution Algorithm может обрабатывать множество ордеров всех типов. В этом случае определяется множество лимитных ордеров на продажу.",
|
||||
"updated": 1637757731866
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -87,6 +97,11 @@
|
||||
"language": "TR",
|
||||
"text": "Algoritmanın menüsünde Yapılandır'ı (Configure) seçin ve bu tanımın sonuçlarını düşünün!",
|
||||
"updated": 1636208699352
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Выберите Configure в меню алгоритма и подумайте над значением этого определения!",
|
||||
"updated": 1637757772068
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -115,6 +130,11 @@
|
||||
"language": "TR",
|
||||
"text": "Hem nasıl pozisyon alınacağını tanımladığınız açık aşama hem de nasıl çıkılacağını tanımladığınız kapalı aşama, her biri belirli bir miktarda sermayeyi işleyen birden fazla yürütme algoritması içerebilir.",
|
||||
"updated": 1636208733018
|
||||
},
|
||||
{
|
||||
"language": "RU",
|
||||
"text": "Как на этапе открытия, где Вы определяете как открыть позицию, так и на этапе закрытия - как выйти, может быть множество алгоритмов выполнения, каждый из которых обрабатывает определенное количество капитала.",
|
||||
"updated": 1637757971911
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -122,6 +122,7 @@ function newFoundationsFunctionLibraryTaskFunctions() {
|
||||
'Trading Bot Instance->' +
|
||||
'Learning Bot Instance->' +
|
||||
'Sensor Process Instance->Time Frames Filter->API Data Fetcher Process Instance->Indicator Process Instance->Trading Process Instance->Learning Process Instance->' +
|
||||
'Social Trading Bot Reference->Social Trading Bot->Signing Account->' +
|
||||
'Execution Started Event->' +
|
||||
'Key Reference->Exchange Account Key->' +
|
||||
'Task Manager->' +
|
||||
|
||||
|
After Width: | Height: | Size: 15 KiB |
@@ -23,15 +23,15 @@
|
||||
"type": "Tokens Awarded",
|
||||
"name": "New Tokens Awarded",
|
||||
"project": "Governance",
|
||||
"id": "4639a558-8407-4c09-a2ca-44df964a1e67",
|
||||
"id": "a124db5d-ac28-45c6-b62e-86c9055eed7e",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 13706.000000000002,
|
||||
"y": 5545.635444127544
|
||||
"x": 13780.000000000002,
|
||||
"y": 5436.635444127544
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 13856.000000000002,
|
||||
"y": 5805.443065262876
|
||||
"x": 13930.000000000002,
|
||||
"y": 5696.443065262876
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -46,15 +46,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "0ddf21e9-c4f4-426f-96bc-8f5a63232dd8",
|
||||
"id": "b6351794-37af-4d80-954e-9f351cc6de91",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 13856.000000000002,
|
||||
"y": 5805.443065262876
|
||||
"x": 13930.000000000002,
|
||||
"y": 5696.443065262876
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 14006.000000000002,
|
||||
"y": 6065.250686398208
|
||||
"x": 14080.000000000002,
|
||||
"y": 5956.250686398208
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -78,15 +78,15 @@
|
||||
"type": "Tokens Awarded",
|
||||
"name": "New Tokens Awarded",
|
||||
"project": "Governance",
|
||||
"id": "9be178f0-d3bb-464d-a565-39e2bfbb35ab",
|
||||
"id": "8579b892-31b0-4e42-82a4-02093ebc436d",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 14606.000000000002,
|
||||
"y": 6065.250686398208
|
||||
"x": 14680.000000000002,
|
||||
"y": 5956.250686398208
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 14306.000000000002,
|
||||
"y": 6065.250686398208
|
||||
"x": 14380.000000000002,
|
||||
"y": 5956.250686398208
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -101,15 +101,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "0cc5fc16-dfa8-4942-8f1b-c5fffc75e990",
|
||||
"id": "14c75e04-d34c-42e9-9a5d-64363c612bc6",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 14306.000000000002,
|
||||
"y": 6065.250686398208
|
||||
"x": 14380.000000000002,
|
||||
"y": 5956.250686398208
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 14006.000000000002,
|
||||
"y": 6065.250686398208
|
||||
"x": 14080.000000000002,
|
||||
"y": 5956.250686398208
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -124,15 +124,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "b4d397c3-c156-466a-888a-69a0d5668816",
|
||||
"id": "18387cb4-e09a-450b-a4d2-5ee119352611",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 14006.000000000002,
|
||||
"y": 6065.250686398208
|
||||
"x": 14080.000000000002,
|
||||
"y": 5956.250686398208
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 13856.000000000002,
|
||||
"y": 6325.05830753354
|
||||
"x": 13930.000000000002,
|
||||
"y": 6216.05830753354
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -163,18 +163,18 @@
|
||||
"name": "Julian-Molina",
|
||||
"config": "{}",
|
||||
"project": "Governance",
|
||||
"id": "77389e53-60e7-428c-bcba-744f2344354d",
|
||||
"id": "a7071196-9798-4241-83fc-b638819ecb2e",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 14306.000000000002,
|
||||
"y": 6284.865928668872
|
||||
"x": 14189.807621135333,
|
||||
"y": 6066.05830753354
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 14265.807621135333,
|
||||
"y": 6434.865928668872
|
||||
"x": 14339.807621135333,
|
||||
"y": 6325.865928668872
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": true,
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
@@ -202,15 +202,15 @@
|
||||
"type": "Tokens Awarded",
|
||||
"name": "New Tokens Awarded",
|
||||
"project": "Governance",
|
||||
"id": "cd37a48f-94a3-47c0-8c20-687bc7c6328c",
|
||||
"id": "e3b52a34-4336-46a6-934c-3afade70bc96",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 14525.615242270664,
|
||||
"y": 6284.865928668872
|
||||
"x": 14599.615242270664,
|
||||
"y": 6175.865928668872
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 14265.807621135333,
|
||||
"y": 6434.865928668872
|
||||
"x": 14339.807621135333,
|
||||
"y": 6325.865928668872
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -229,15 +229,15 @@
|
||||
"type": "Tokens Bonus",
|
||||
"name": "New Tokens Bonus",
|
||||
"project": "Governance",
|
||||
"id": "19b6cf13-4af2-4da0-b419-49a8da82cb6d",
|
||||
"id": "58c6a5bf-96b2-4c96-96b0-6231315d76c5",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 14415.807621135333,
|
||||
"y": 6694.6735498042035
|
||||
"x": 14489.807621135333,
|
||||
"y": 6585.6735498042035
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 14265.807621135333,
|
||||
"y": 6434.865928668872
|
||||
"x": 14339.807621135333,
|
||||
"y": 6325.865928668872
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -252,15 +252,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "17d3b656-ebdc-4a60-9174-8d3f112ae8c3",
|
||||
"id": "176105de-df31-4984-9e2b-9e5c45ea56cf",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 14265.807621135333,
|
||||
"y": 6434.865928668872
|
||||
"x": 14339.807621135333,
|
||||
"y": 6325.865928668872
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 14006.000000000002,
|
||||
"y": 6584.865928668872
|
||||
"x": 14080.000000000002,
|
||||
"y": 6475.865928668872
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -283,141 +283,18 @@
|
||||
"userSupporters": [
|
||||
{
|
||||
"type": "User Supporter",
|
||||
"name": "EvaMaria70",
|
||||
"config": "{}",
|
||||
"project": "Governance",
|
||||
"id": "30080add-ff82-4575-a166-4704248d9f01",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 14415.807621135333,
|
||||
"y": 6694.6735498042035
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 14156.000000000002,
|
||||
"y": 6844.6735498042035
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
},
|
||||
"referenceParent": {
|
||||
"type": "User Profile",
|
||||
"name": "EvaMaria70",
|
||||
"id": "75a78d74-93f3-44c5-a96a-5b2b9f730afe"
|
||||
},
|
||||
"referenceParentCombinedNodePath": [
|
||||
[
|
||||
"EvaMaria70",
|
||||
"User Profile"
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"tokensAwarded": {
|
||||
"type": "Tokens Awarded",
|
||||
"name": "New Tokens Awarded",
|
||||
"project": "Governance",
|
||||
"id": "a9eb74e7-7c82-4ff2-a955-92b749a26b40",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 14306.000000000002,
|
||||
"y": 7104.481170939535
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 14156.000000000002,
|
||||
"y": 6844.6735498042035
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"tokensBonus": {
|
||||
"type": "Tokens Bonus",
|
||||
"name": "New Tokens Bonus",
|
||||
"project": "Governance",
|
||||
"id": "97ef2893-1dc1-453d-887f-05bcee9b2093",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 13896.19237886467,
|
||||
"y": 6994.6735498042035
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 14156.000000000002,
|
||||
"y": 6844.6735498042035
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "dfd984c3-3303-4e49-8682-3012635e519a",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 14156.000000000002,
|
||||
"y": 6844.6735498042035
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 14006.000000000002,
|
||||
"y": 6584.865928668872
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"mentorshipProgram": {
|
||||
"type": "Mentorship Program",
|
||||
"name": "New Mentorship Program",
|
||||
"config": "{}",
|
||||
"project": "Governance",
|
||||
"userMentors": [
|
||||
{
|
||||
"type": "User Mentor",
|
||||
"name": "Luis-Fernando-Molina",
|
||||
"config": "{}",
|
||||
"project": "Governance",
|
||||
"id": "069fa527-f2fc-48b9-a1bf-4730d6693d7d",
|
||||
"id": "56e79566-dcb2-4eb2-be02-597cf4d2f817",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 13896.19237886467,
|
||||
"y": 6994.6735498042035
|
||||
"x": 14368.807621135333,
|
||||
"y": 6791.6735498042035
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 13746.19237886467,
|
||||
"y": 6734.865928668872
|
||||
"x": 14109.000000000002,
|
||||
"y": 6941.6735498042035
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -448,15 +325,15 @@
|
||||
"type": "Tokens Awarded",
|
||||
"name": "New Tokens Awarded",
|
||||
"project": "Governance",
|
||||
"id": "a1769f48-d147-4f74-8eb9-3ec8919d1b0b",
|
||||
"id": "d54b8578-3fc5-465c-ad42-d9305b7b4d26",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 13486.38475772934,
|
||||
"y": 6884.865928668872
|
||||
"x": 14259.000000000002,
|
||||
"y": 7201.481170939535
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 13746.19237886467,
|
||||
"y": 6734.865928668872
|
||||
"x": 14109.000000000002,
|
||||
"y": 6941.6735498042035
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -475,15 +352,15 @@
|
||||
"type": "Tokens Bonus",
|
||||
"name": "New Tokens Bonus",
|
||||
"project": "Governance",
|
||||
"id": "3e5c2e7c-d485-419c-82cd-79d2a021a8a6",
|
||||
"id": "d7a6dc77-8fad-45ad-9036-d8b197ef14bb",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 13596.19237886467,
|
||||
"y": 6475.05830753354
|
||||
"x": 13849.19237886467,
|
||||
"y": 7091.6735498042035
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 13746.19237886467,
|
||||
"y": 6734.865928668872
|
||||
"x": 14109.000000000002,
|
||||
"y": 6941.6735498042035
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -498,15 +375,138 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "9e9486db-25f4-4124-9ac6-2ce4dc0ca71d",
|
||||
"id": "a5fa93a8-2369-424d-ab90-f3786e615535",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 13746.19237886467,
|
||||
"y": 6734.865928668872
|
||||
"x": 14109.000000000002,
|
||||
"y": 6941.6735498042035
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 14006.000000000002,
|
||||
"y": 6584.865928668872
|
||||
"x": 14080.000000000002,
|
||||
"y": 6475.865928668872
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": true,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"mentorshipProgram": {
|
||||
"type": "Mentorship Program",
|
||||
"name": "New Mentorship Program",
|
||||
"config": "{}",
|
||||
"project": "Governance",
|
||||
"userMentors": [
|
||||
{
|
||||
"type": "User Mentor",
|
||||
"name": "piyanthak",
|
||||
"config": "{}",
|
||||
"project": "Governance",
|
||||
"id": "f8f8923c-cf54-4551-9880-f534e557472c",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 13970.19237886467,
|
||||
"y": 6885.6735498042035
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 13820.19237886467,
|
||||
"y": 6625.865928668872
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
},
|
||||
"referenceParent": {
|
||||
"type": "User Profile",
|
||||
"name": "piyanthak",
|
||||
"id": "b1ce221b-2752-4419-ae53-8410e8a93798"
|
||||
},
|
||||
"referenceParentCombinedNodePath": [
|
||||
[
|
||||
"piyanthak",
|
||||
"User Profile"
|
||||
]
|
||||
]
|
||||
}
|
||||
}
|
||||
],
|
||||
"tokensAwarded": {
|
||||
"type": "Tokens Awarded",
|
||||
"name": "New Tokens Awarded",
|
||||
"project": "Governance",
|
||||
"id": "5164c149-7a84-4f23-b123-e50f70e49964",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 13560.38475772934,
|
||||
"y": 6775.865928668872
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 13820.19237886467,
|
||||
"y": 6625.865928668872
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"tokensBonus": {
|
||||
"type": "Tokens Bonus",
|
||||
"name": "New Tokens Bonus",
|
||||
"project": "Governance",
|
||||
"id": "f8d69832-b160-4b1a-a9a0-176cbff75dab",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 13670.19237886467,
|
||||
"y": 6366.05830753354
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 13820.19237886467,
|
||||
"y": 6625.865928668872
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
"isFrozen": false,
|
||||
"isCollapsed": false,
|
||||
"angleToParent": 1,
|
||||
"distanceToParent": 3,
|
||||
"arrangementStyle": 0
|
||||
},
|
||||
"uiObject": {
|
||||
"isRunning": false
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "5e92b3fb-fd0e-4cd3-af7b-1e6598dc9a35",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 13820.19237886467,
|
||||
"y": 6625.865928668872
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 14080.000000000002,
|
||||
"y": 6475.865928668872
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -521,15 +521,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "8be5cd41-a179-457f-8737-496ba0539e76",
|
||||
"id": "e950205a-6c38-4834-b507-af8d89aae286",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 14006.000000000002,
|
||||
"y": 6584.865928668872
|
||||
"x": 14080.000000000002,
|
||||
"y": 6475.865928668872
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 13856.000000000002,
|
||||
"y": 6325.05830753354
|
||||
"x": 13930.000000000002,
|
||||
"y": 6216.05830753354
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -544,15 +544,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "aef7eb8e-84f8-4211-8716-bf93e754817d",
|
||||
"id": "1c7aeef6-be23-4022-a7d4-421e424e38e4",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 13856.000000000002,
|
||||
"y": 6325.05830753354
|
||||
"x": 13930.000000000002,
|
||||
"y": 6216.05830753354
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 13556.000000000002,
|
||||
"y": 6325.05830753354
|
||||
"x": 13630.000000000002,
|
||||
"y": 6216.05830753354
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -571,15 +571,15 @@
|
||||
"type": "Tokens Mined",
|
||||
"name": "New Tokens Mined",
|
||||
"project": "Governance",
|
||||
"id": "9bd4d8ef-3d26-434a-a8cb-eb2a8e8631b0",
|
||||
"id": "8f7d30c5-ab68-4642-8137-d16e1b79cc0f",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 13256.000000000002,
|
||||
"y": 6325.05830753354
|
||||
"x": 13330.000000000002,
|
||||
"y": 6216.05830753354
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 13556.000000000002,
|
||||
"y": 6325.05830753354
|
||||
"x": 13630.000000000002,
|
||||
"y": 6216.05830753354
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
@@ -594,15 +594,15 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"id": "e659dd1a-aaf9-4d33-b732-880fdc3c0f5d",
|
||||
"id": "09b2e0a4-d810-49d3-95a2-25a09de1a584",
|
||||
"savedPayload": {
|
||||
"position": {
|
||||
"x": 13556.000000000002,
|
||||
"y": 6325.05830753354
|
||||
"x": 13630.000000000002,
|
||||
"y": 6216.05830753354
|
||||
},
|
||||
"targetPosition": {
|
||||
"x": 13556.000000000002,
|
||||
"y": 6325.05830753354
|
||||
"x": 13630.000000000002,
|
||||
"y": 6216.05830753354
|
||||
},
|
||||
"floatingObject": {
|
||||
"isPinned": false,
|
||||
|
||||
@@ -32,6 +32,13 @@
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Desktop Apps->"
|
||||
},
|
||||
"childrenNodesProperties": [],
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "signingAccount",
|
||||
"type": "node",
|
||||
"childType": "Signing Account",
|
||||
"autoAdd": false
|
||||
}
|
||||
],
|
||||
"propertyNameAtParent": "algoTradesPlatform"
|
||||
}
|
||||
@@ -32,6 +32,13 @@
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->P2P Network Nodes->"
|
||||
},
|
||||
"childrenNodesProperties": [],
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "signingAccount",
|
||||
"type": "node",
|
||||
"childType": "Signing Account",
|
||||
"autoAdd": false
|
||||
}
|
||||
],
|
||||
"propertyNameAtParent": "p2pNetworkNodes"
|
||||
}
|
||||
@@ -20,9 +20,9 @@
|
||||
"relatedUiObjectProject": "Governance"
|
||||
},
|
||||
{
|
||||
"action": "Install Secrets",
|
||||
"action": "Install Signing Accounts",
|
||||
"actionProject": "Governance",
|
||||
"label": "Install Secrets",
|
||||
"label": "Install Signing Accounts",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Proceed",
|
||||
"workDoneLabel": "Done",
|
||||
|
||||
@@ -23,10 +23,7 @@
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Signing Accounts->"
|
||||
},
|
||||
"referencingRules": {
|
||||
"compatibleTypes": "->P2P Network Node->Algo Traders Platform->Social Trading Mobile App->Social Trading Desktop App->Social Trading Server App->"
|
||||
"compatibleTypes": "->P2P Network Node->Algo Traders Platform->Social Trading Mobile App->Social Trading Desktop App->Social Trading Server App->Social Trading Bot->Social Persona->"
|
||||
},
|
||||
"editors": {
|
||||
"config": true
|
||||
@@ -34,9 +31,6 @@
|
||||
"initialValues": {
|
||||
"config": "{}"
|
||||
},
|
||||
"propertyNameAtParent": "signingAccounts",
|
||||
"childrenNodesProperties": [],
|
||||
"title": [
|
||||
"Use Reference Parent"
|
||||
]
|
||||
"propertyNameAtParent": "signingAccount",
|
||||
"childrenNodesProperties": []
|
||||
}
|
||||
@@ -47,6 +47,12 @@
|
||||
"type": "node",
|
||||
"childType": "Social Personas Following",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "signingAccount",
|
||||
"type": "node",
|
||||
"childType": "Signing Account",
|
||||
"autoAdd": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"type": "Signing Accounts",
|
||||
"type": "Social Trading Bot Reference",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
@@ -12,18 +12,16 @@
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"title": [
|
||||
"Use Reference Parent"
|
||||
],
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->User Profile->"
|
||||
"compatibleTypes": "->Trading Bot Instance->"
|
||||
},
|
||||
"propertyNameAtParent": "signingAccounts",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "signingAccounts",
|
||||
"type": "array",
|
||||
"childType": "Signing Account",
|
||||
"autoAdd": false
|
||||
}
|
||||
]
|
||||
"referencingRules": {
|
||||
"compatibleTypes": "->Social Trading Bot->"
|
||||
},
|
||||
"propertyNameAtParent": "socialTradingBotReference"
|
||||
}
|
||||
@@ -18,6 +18,16 @@
|
||||
"relatedUiObject": "Social Trading Bots Following",
|
||||
"relatedUiObjectProject": "Governance"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "availableSignals",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Available Signals",
|
||||
"relatedUiObject": "Available Signals",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
@@ -47,6 +57,18 @@
|
||||
"type": "node",
|
||||
"childType": "Social Trading Bots Following",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "signingAccount",
|
||||
"type": "node",
|
||||
"childType": "Signing Account",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "availableSignals",
|
||||
"type": "node",
|
||||
"childType": "Available Signals",
|
||||
"autoAdd": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -32,6 +32,13 @@
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Desktop Apps->"
|
||||
},
|
||||
"childrenNodesProperties": [],
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "signingAccount",
|
||||
"type": "node",
|
||||
"childType": "Signing Account",
|
||||
"autoAdd": false
|
||||
}
|
||||
],
|
||||
"propertyNameAtParent": "socialTradingDesktopApps"
|
||||
}
|
||||
@@ -32,6 +32,13 @@
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Mobile Apps->"
|
||||
},
|
||||
"childrenNodesProperties": [],
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "signingAccount",
|
||||
"type": "node",
|
||||
"childType": "Signing Account",
|
||||
"autoAdd": false
|
||||
}
|
||||
],
|
||||
"propertyNameAtParent": "socialTradingMobileApps"
|
||||
}
|
||||
@@ -32,6 +32,13 @@
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Server Apps->"
|
||||
},
|
||||
"childrenNodesProperties": [],
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "signingAccount",
|
||||
"type": "node",
|
||||
"childType": "Signing Account",
|
||||
"autoAdd": false
|
||||
}
|
||||
],
|
||||
"propertyNameAtParent": "socialTradingServerApps"
|
||||
}
|
||||
@@ -112,12 +112,6 @@
|
||||
"childType": "Tokens Mined",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "signingAccounts",
|
||||
"type": "node",
|
||||
"childType": "Signing Accounts",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "userApps",
|
||||
"type": "node",
|
||||
|
||||
@@ -38,9 +38,9 @@ function newGovernanceActionSwitch() {
|
||||
UI.projects.governance.functionLibraries.profileConstructor.buildProfile(action.node, action.rootNodes)
|
||||
break
|
||||
}
|
||||
case 'Install Secrets':
|
||||
case 'Install Signing Accounts':
|
||||
{
|
||||
UI.projects.governance.functionLibraries.profileConstructor.installSecrets(action.node, action.rootNodes)
|
||||
UI.projects.governance.functionLibraries.profileConstructor.installSigningAccounts(action.node, action.rootNodes)
|
||||
break
|
||||
}
|
||||
case 'Add Missing Plugin User Profiles':
|
||||
|
||||
@@ -108,7 +108,7 @@ function newGovernanceFunctionLibraryLiquidityProgram() {
|
||||
) {
|
||||
node.payload.liquidityProgram.isActive = false
|
||||
userProfile.payload.uiObject.setErrorMessage(
|
||||
"Waiting for liquidity balance. It takes 1 minute to load the liquidity provided by each profile, bacause you are using a free API provided by BSC Scan.",
|
||||
"Waiting for liquidity balance. It takes 1 minute to load the liquidity provided by each profile, because you are using a free API provided by BSC Scan.",
|
||||
UI.projects.governance.globals.designer.SET_ERROR_COUNTER_FACTOR
|
||||
)
|
||||
return
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
function newGovernanceFunctionLibraryProfileConstructor() {
|
||||
let thisObject = {
|
||||
buildProfile: buildProfile,
|
||||
installSecrets: installSecrets
|
||||
installSigningAccounts: installSigningAccounts
|
||||
}
|
||||
|
||||
return thisObject
|
||||
@@ -124,6 +124,83 @@ function newGovernanceFunctionLibraryProfileConstructor() {
|
||||
'User Profile',
|
||||
UI.projects.foundations.spaces.designSpace.workspace.workspaceNode.rootNodes
|
||||
)
|
||||
|
||||
UI.projects.visualScripting.functionLibraries.attachDetach.referenceAttachNode(node, userProfile)
|
||||
/*
|
||||
Set up a basic profile to start receiving benefits
|
||||
*/
|
||||
let finServices = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(userProfile.tokenPowerSwitch, "Financial Programs", userProfile)
|
||||
finServices.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
|
||||
finServices.payload.uiObject.menu.internalClick("Add Financial Program")
|
||||
|
||||
let stakeProg = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(finServices, "Staking Program", userProfile)
|
||||
stakeProg.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
|
||||
stakeProg.payload.uiObject.menu.internalClick("Add Tokens Awarded")
|
||||
|
||||
let liquidProgs = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(userProfile.tokenPowerSwitch, "Liquidity Programs", userProfile)
|
||||
liquidProgs.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
|
||||
liquidProgs.payload.uiObject.menu.internalClick('Add Liquidity Program')
|
||||
|
||||
let liquidProg = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(liquidProgs, "Liquidity Program", userProfile)
|
||||
liquidProg.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
|
||||
liquidProg.payload.uiObject.menu.internalClick('Add Tokens Awarded')
|
||||
/*
|
||||
Check if the user already has the SA fork. If not, do it for them.
|
||||
*/
|
||||
|
||||
/*
|
||||
const hasFork = UI.projects.governance.spaces.userProfileSpace.githubForks.get(githubUsername)
|
||||
if (hasFork === undefined) {
|
||||
// New user! Probably doesn't have a fork, so let's create it.
|
||||
let apisNode = UI.projects.foundations.spaces.designSpace.workspace.getHierarchyHeadByNodeType('APIs')
|
||||
if (apisNode === undefined) {
|
||||
UI.projects.education.spaces.docsSpace.navigateTo('Governance', 'Topic', 'Gov Error - Github Credentials Missing', 'Anchor Github Credentials Missing')
|
||||
return
|
||||
}
|
||||
if (apisNode.githubAPI === undefined) {
|
||||
UI.projects.education.spaces.docsSpace.navigateTo('Governance', 'Topic', 'Gov Error - Github Credentials Missing', 'Anchor Github Credentials Missing')
|
||||
return
|
||||
}
|
||||
|
||||
let config = JSON.parse(apisNode.githubAPI.config)
|
||||
if (config.username === undefined || config.username === "") {
|
||||
UI.projects.education.spaces.docsSpace.navigateTo('Governance', 'Topic', 'Gov Error - Github Credentials Missing', 'Anchor Github Credentials Missing')
|
||||
return
|
||||
}
|
||||
if (config.token === undefined || config.token === "") {
|
||||
UI.projects.education.spaces.docsSpace.navigateTo('Governance', 'Topic', 'Gov Error - Github Credentials Missing', 'Anchor Github Credentials Missing')
|
||||
return
|
||||
}
|
||||
|
||||
let params = {
|
||||
method: 'createGithubFork',
|
||||
username: config.username,
|
||||
token: config.token,
|
||||
}
|
||||
|
||||
let url = 'GOV' // We will access the default Client GOV endpoint.
|
||||
|
||||
httpRequest(JSON.stringify(params), url, onResponse)
|
||||
|
||||
function onResponse(err, data) {
|
||||
|
||||
data = JSON.parse(data)
|
||||
if (err.result === GLOBAL.DEFAULT_OK_RESPONSE.result && data.result === GLOBAL.DEFAULT_OK_RESPONSE.result) {
|
||||
UI.projects.education.spaces.docsSpace.navigateTo('Governance', 'Topic', 'Gov Message - Automated User Profile Contribute Done')
|
||||
} else {
|
||||
if (data.docs === undefined) { return }
|
||||
UI.projects.education.spaces.docsSpace.navigateTo(
|
||||
data.docs.project,
|
||||
data.docs.category,
|
||||
data.docs.type,
|
||||
data.docs.anchor,
|
||||
undefined,
|
||||
data.docs.placeholder
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
/*
|
||||
We store at the User Profile the Signed githubUsername
|
||||
*/
|
||||
@@ -147,6 +224,7 @@ function newGovernanceFunctionLibraryProfileConstructor() {
|
||||
Show nice message.
|
||||
*/
|
||||
if (mnemonic === undefined || mnemonic === "") {
|
||||
// TODO link to some wallet and setup the token
|
||||
node.payload.uiObject.setInfoMessage(
|
||||
"Profile Private Key has been successfully created. User Profile installed as a plugin and saved. Use the Private Key at a crypto wallet and delete this node once done.",
|
||||
UI.projects.governance.globals.designer.SET_INFO_COUNTER_FACTOR
|
||||
@@ -161,7 +239,7 @@ function newGovernanceFunctionLibraryProfileConstructor() {
|
||||
}
|
||||
}
|
||||
|
||||
function installSecrets(
|
||||
function installSigningAccounts(
|
||||
node,
|
||||
rootNodes
|
||||
) {
|
||||
@@ -191,21 +269,6 @@ function newGovernanceFunctionLibraryProfileConstructor() {
|
||||
)
|
||||
return
|
||||
}
|
||||
/*
|
||||
Delete Signing Accounts with all its children, it it exists.
|
||||
*/
|
||||
if (userProfile.signingAccounts !== undefined) {
|
||||
let rootNodes = UI.projects.foundations.spaces.designSpace.workspace.workspaceNode.rootNodes
|
||||
UI.projects.visualScripting.functionLibraries.nodeDeleter.deleteUIObject(userProfile.signingAccounts, rootNodes)
|
||||
}
|
||||
/*
|
||||
Create Signing Accounts.
|
||||
*/
|
||||
let signingAccounts = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(
|
||||
userProfile,
|
||||
'Signing Accounts',
|
||||
UI.projects.foundations.spaces.designSpace.workspace.workspaceNode.rootNodes
|
||||
)
|
||||
|
||||
let algoTradersPlatform = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(userProfile.userApps, 'Algo Traders Platform')
|
||||
let socialTradingDesktopApp = UI.projects.visualScripting.utilities.branches.nodeBranchToArray(userProfile.userApps, 'Social Trading Desktop App')
|
||||
@@ -308,15 +371,19 @@ function newGovernanceFunctionLibraryProfileConstructor() {
|
||||
|
||||
function createSigningAccount(signature) {
|
||||
|
||||
/*
|
||||
Delete Signing Account if it already exists.
|
||||
*/
|
||||
let rootNodes = UI.projects.foundations.spaces.designSpace.workspace.workspaceNode.rootNodes
|
||||
if (targetNode.signingAccount !== undefined) {
|
||||
UI.projects.visualScripting.functionLibraries.nodeDeleter.deleteUIObject(targetNode.signingAccount, rootNodes)
|
||||
}
|
||||
|
||||
let signingAccount = UI.projects.visualScripting.functionLibraries.uiObjectsFromNodes.addUIObject(
|
||||
signingAccounts,
|
||||
targetNode,
|
||||
'Signing Account',
|
||||
UI.projects.foundations.spaces.designSpace.workspace.workspaceNode.rootNodes
|
||||
rootNodes
|
||||
)
|
||||
|
||||
signingAccount.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180
|
||||
|
||||
UI.projects.visualScripting.functionLibraries.attachDetach.referenceAttachNode(signingAccount, targetNode)
|
||||
/*
|
||||
Let's get a cool name for this node.
|
||||
*/
|
||||
|
||||
@@ -97,39 +97,29 @@ exports.newNetworkModulesUserProfiles = function newNetworkModulesUserProfiles()
|
||||
SA.projects.network.globals.memory.maps.USER_PROFILES_BY_ID.set(userProfileId, userProfile)
|
||||
SA.projects.network.globals.memory.maps.USER_PROFILES_BY_HANDLE.set(userHandle, userProfile)
|
||||
SA.projects.network.globals.memory.maps.USER_PROFILES_BY_BLOKCHAIN_ACCOUNT.set(blockchainAccount, userProfile)
|
||||
/*
|
||||
Each User Profile might have Signing Accounts, meaning
|
||||
accounts that can sign on behalf of the User Profile.
|
||||
*/
|
||||
if (userProfilePlugin.signingAccounts !== undefined) {
|
||||
|
||||
let algoTradersPlatform = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(userProfilePlugin.userApps, 'Algo Traders Platform')
|
||||
let socialTradingDesktopApp = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(userProfilePlugin.userApps, 'Social Trading Desktop App')
|
||||
let socialTradingMobileApp = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(userProfilePlugin.userApps, 'Social Trading Mobile App')
|
||||
let socialTradingServerApp = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(userProfilePlugin.userApps, 'Social Trading Server App')
|
||||
let socialTradingBots = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(userProfilePlugin.userBots, 'Social Trading Bot')
|
||||
let socialPersonas = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(userProfilePlugin.socialPersonas, 'Social Persona')
|
||||
let p2pNetworkNodes = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(userProfilePlugin.p2pNetworkNodes, 'P2P Network Node')
|
||||
let algoTradersPlatform = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(userProfilePlugin.userApps, 'Algo Traders Platform')
|
||||
let socialTradingDesktopApp = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(userProfilePlugin.userApps, 'Social Trading Desktop App')
|
||||
let socialTradingMobileApp = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(userProfilePlugin.userApps, 'Social Trading Mobile App')
|
||||
let socialTradingServerApp = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(userProfilePlugin.userApps, 'Social Trading Server App')
|
||||
let socialTradingBots = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(userProfilePlugin.userBots, 'Social Trading Bot')
|
||||
let socialPersonas = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(userProfilePlugin.socialPersonas, 'Social Persona')
|
||||
let p2pNetworkNodes = SA.projects.visualScripting.utilities.nodeFunctions.nodeBranchToArray(userProfilePlugin.p2pNetworkNodes, 'P2P Network Node')
|
||||
|
||||
let networkClientsMap = new Map()
|
||||
checkNwetworkClients(algoTradersPlatform)
|
||||
checkNwetworkClients(socialTradingDesktopApp)
|
||||
checkNwetworkClients(socialTradingMobileApp)
|
||||
checkNwetworkClients(socialTradingServerApp)
|
||||
checkNwetworkClients(socialTradingBots)
|
||||
checkNwetworkClients(socialPersonas)
|
||||
checkNwetworkClients(p2pNetworkNodes)
|
||||
|
||||
addToNetworkClientMap(algoTradersPlatform)
|
||||
addToNetworkClientMap(socialTradingDesktopApp)
|
||||
addToNetworkClientMap(socialTradingMobileApp)
|
||||
addToNetworkClientMap(socialTradingServerApp)
|
||||
addToNetworkClientMap(socialTradingBots)
|
||||
addToNetworkClientMap(socialPersonas)
|
||||
addToNetworkClientMap(p2pNetworkNodes)
|
||||
function checkNwetworkClients(netwokClients) {
|
||||
|
||||
function addToNetworkClientMap(nodeArray) {
|
||||
for (let i = 0; i < nodeArray.length; i++) {
|
||||
let currentNode = nodeArray[i]
|
||||
networkClientsMap.set(currentNode.id, currentNode)
|
||||
}
|
||||
}
|
||||
|
||||
for (let j = 0; j < userProfilePlugin.signingAccounts.signingAccounts.length; j++) {
|
||||
let signingAccount = userProfilePlugin.signingAccounts.signingAccounts[j]
|
||||
for (let j = 0; j < netwokClients.length; j++) {
|
||||
let networkClient = netwokClients[j]
|
||||
let signingAccount = networkClient.signingAccount
|
||||
if (signingAccount === undefined) { continue }
|
||||
let config = JSON.parse(signingAccount.config)
|
||||
let signatureObject = config.signature
|
||||
let web3 = new SA.nodeModules.web3()
|
||||
@@ -138,19 +128,15 @@ exports.newNetworkModulesUserProfiles = function newNetworkModulesUserProfiles()
|
||||
/*
|
||||
If the Signing Account is for a P2P node, we will add the node to the array of available nodes at the p2p network.
|
||||
*/
|
||||
if (signingAccount.savedPayload === undefined) { continue }
|
||||
if (signingAccount.savedPayload.referenceParent === undefined) { continue }
|
||||
signingAccount.referenceParent = networkClientsMap.get(signingAccount.savedPayload.referenceParent.id)
|
||||
if (
|
||||
signingAccount.referenceParent !== undefined &&
|
||||
signingAccount.referenceParent.type === "P2P Network Node" &&
|
||||
signingAccount.referenceParent.config !== undefined
|
||||
networkClient.type === "P2P Network Node" &&
|
||||
networkClient.config !== undefined
|
||||
) {
|
||||
let config
|
||||
try {
|
||||
config = JSON.parse(signingAccount.referenceParent.config)
|
||||
config = JSON.parse(networkClient.config)
|
||||
} catch (err) {
|
||||
console.log('P2P Network Node Config not in JSON format. userProfileHandle = ' + userHandle + ' NodeId = ' + signingAccount.referenceParent.id)
|
||||
console.log('P2P Network Node Config not in JSON format. userProfileHandle = ' + userHandle + ' NodeId = ' + networkClient.id)
|
||||
continue
|
||||
}
|
||||
if (config.host === undefined) {
|
||||
@@ -161,22 +147,22 @@ exports.newNetworkModulesUserProfiles = function newNetworkModulesUserProfiles()
|
||||
}
|
||||
|
||||
let p2pNetworkNode = SA.projects.network.modules.p2pNetworkNode.newNetworkModulesP2PNetworkNode()
|
||||
p2pNetworkNode.initialize(signingAccount.referenceParent, userProfile, blockchainAccount)
|
||||
p2pNetworkNode.initialize(networkClient, userProfile, blockchainAccount)
|
||||
SA.projects.network.globals.memory.arrays.P2P_NETWORK_NODES.push(p2pNetworkNode)
|
||||
}
|
||||
/*
|
||||
Now, we will extract the information from the User Profile, specifically of our identity at the p2p network.
|
||||
*/
|
||||
if (
|
||||
signingAccount.referenceParent !== undefined &&
|
||||
signingAccount.referenceParent.id === SA.secrets.map.get(nodeCodeName).nodeId
|
||||
networkClient.id === SA.secrets.map.get(nodeCodeName).nodeId
|
||||
) {
|
||||
p2pNetworkIdentity.node = signingAccount.referenceParent
|
||||
p2pNetworkIdentity.node = networkClient
|
||||
p2pNetworkIdentity.blockchainAccount = blockchainAccount
|
||||
p2pNetworkIdentity.userProfile = userProfile
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1740,5 +1740,30 @@
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "Trading-Signals",
|
||||
"propertyName": "tradingSignals",
|
||||
"UI": {
|
||||
"functionLibraries": [
|
||||
{
|
||||
"name": "Trading Signals Functions",
|
||||
"propertyName": "tradingSignalsFunctions",
|
||||
"functionName": "newSocialBotsFunctionLibraryTradingSignalsFunctions"
|
||||
}
|
||||
],
|
||||
"utilities": []
|
||||
},
|
||||
"TS": {
|
||||
"botModules": [
|
||||
{
|
||||
"name": "Trading Signals",
|
||||
"propertyName": "tradingSignals",
|
||||
"functionName": "newTradingSignalsBotModulesTradingSignals",
|
||||
"fileName": "TradingSignals.js",
|
||||
"folderName": ""
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
@@ -0,0 +1,100 @@
|
||||
{
|
||||
"type": "Available Signals",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"actionFunction": "uiObject.configEditor.activate",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "triggerStageSignals",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Trigger Stage Signals",
|
||||
"relatedUiObject": "Trigger Stage Signals",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "openStageSignals",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Open Stage Signals",
|
||||
"relatedUiObject": "Open Stage Signals",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "manageStageSignals",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Manage Stage Signals",
|
||||
"relatedUiObject": "Manage Stage Signals",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "closeStageSignals",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Close Stage Signals",
|
||||
"relatedUiObject": "Close Stage Signals",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Social Trading Bot->"
|
||||
},
|
||||
"propertyNameAtParent": "availableSignals",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "triggerStageSignals",
|
||||
"type": "node",
|
||||
"childType": "Trigger Stage Signals",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "openStageSignals",
|
||||
"type": "node",
|
||||
"childType": "Open Stage Signals",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "manageStageSignals",
|
||||
"type": "node",
|
||||
"childType": "Manage Stage Signals",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "closeStageSignals",
|
||||
"type": "node",
|
||||
"childType": "Close Stage Signals",
|
||||
"autoAdd": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"type": "Cancel Order Signal",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"actionFunction": "uiObject.configEditor.activate",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Limit Buy Order Signals->Limit Sell Order Signals->Market Buy Order Signals->Market Sell Order Signals->"
|
||||
},
|
||||
"propertyNameAtParent": "cancelOrderSignal",
|
||||
"childrenNodesProperties": []
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"type": "Close Stage Signals",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"actionFunction": "uiObject.configEditor.activate",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Limit Buy Order Signals",
|
||||
"relatedUiObject": "Limit Buy Order Signals",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Limit Sell Order Signals",
|
||||
"relatedUiObject": "Limit Sell Order Signals",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Market Buy Order Signals",
|
||||
"relatedUiObject": "Market Buy Order Signals",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Market Sell Order Signals",
|
||||
"relatedUiObject": "Market Sell Order Signals",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Available Signals->"
|
||||
},
|
||||
"propertyNameAtParent": "closeStageSignals",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "limitBuyOrderSignals",
|
||||
"type": "array",
|
||||
"childType": "Limit Buy Order Signals",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "limitSellOrderSignals",
|
||||
"type": "array",
|
||||
"childType": "Limit Sell Order Signals",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "marketBuyOrderSignals",
|
||||
"type": "array",
|
||||
"childType": "Market Buy Order Signals",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "marketBuyOrderSignals",
|
||||
"type": "array",
|
||||
"childType": "Market Buy Order Signals",
|
||||
"autoAdd": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"type": "Create Order Signal",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"actionFunction": "uiObject.configEditor.activate",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Limit Buy Order Signals->Limit Sell Order Signals->Market Buy Order Signals->Market Sell Order Signals->"
|
||||
},
|
||||
"propertyNameAtParent": "createOrderSignal",
|
||||
"childrenNodesProperties": []
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"type": "Limit Buy Order Signals",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"actionFunction": "uiObject.configEditor.activate",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "createOrderSignal",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Create Order Signal",
|
||||
"relatedUiObject": "Create Order Signal",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "cancelOrderSignal",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Cancel Order Signal",
|
||||
"relatedUiObject": "Cancel Order Signal",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Open Stage Signals->Close Stage Signals->"
|
||||
},
|
||||
"propertyNameAtParent": "limitBuyOrderSignals",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "createOrderSignal",
|
||||
"type": "node",
|
||||
"childType": "Create Order Signal",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "cancelOrderSignal",
|
||||
"type": "node",
|
||||
"childType": "Cancel Order Signal",
|
||||
"autoAdd": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"type": "Limit Sell Order Signals",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"actionFunction": "uiObject.configEditor.activate",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "createOrderSignal",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Create Order Signal",
|
||||
"relatedUiObject": "Create Order Signal",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "cancelOrderSignal",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Cancel Order Signal",
|
||||
"relatedUiObject": "Cancel Order Signal",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Open Stage Signals->Close Stage Signals->"
|
||||
},
|
||||
"propertyNameAtParent": "limitSellOrderSignals",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "createOrderSignal",
|
||||
"type": "node",
|
||||
"childType": "Create Order Signal",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "cancelOrderSignal",
|
||||
"type": "node",
|
||||
"childType": "Cancel Order Signal",
|
||||
"autoAdd": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"type": "Manage Stage Signals",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"actionFunction": "uiObject.configEditor.activate",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Available Signals->"
|
||||
},
|
||||
"propertyNameAtParent": "manageStageSignals",
|
||||
"childrenNodesProperties": []
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"type": "Market Buy Order Signals",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"actionFunction": "uiObject.configEditor.activate",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "createOrderSignal",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Create Order Signal",
|
||||
"relatedUiObject": "Create Order Signal",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "cancelOrderSignal",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Cancel Order Signal",
|
||||
"relatedUiObject": "Cancel Order Signal",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Open Stage Signals->Close Stage Signals->"
|
||||
},
|
||||
"propertyNameAtParent": "marketBuyOrderSignals",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "createOrderSignal",
|
||||
"type": "node",
|
||||
"childType": "Create Order Signal",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "cancelOrderSignal",
|
||||
"type": "node",
|
||||
"childType": "Cancel Order Signal",
|
||||
"autoAdd": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,68 @@
|
||||
{
|
||||
"type": "Market Sell Order Signals",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"actionFunction": "uiObject.configEditor.activate",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "createOrderSignal",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Create Order Signal",
|
||||
"relatedUiObject": "Create Order Signal",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "cancelOrderSignal",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Cancel Order Signal",
|
||||
"relatedUiObject": "Cancel Order Signal",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Open Stage Signals->Close Stage Signals->"
|
||||
},
|
||||
"propertyNameAtParent": "marketSellOrderSignals",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "createOrderSignal",
|
||||
"type": "node",
|
||||
"childType": "Create Order Signal",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "cancelOrderSignal",
|
||||
"type": "node",
|
||||
"childType": "Cancel Order Signal",
|
||||
"autoAdd": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,92 @@
|
||||
{
|
||||
"type": "Open Stage Signals",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"actionFunction": "uiObject.configEditor.activate",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Limit Buy Order Signals",
|
||||
"relatedUiObject": "Limit Buy Order Signals",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Limit Sell Order Signals",
|
||||
"relatedUiObject": "Limit Sell Order Signals",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Market Buy Order Signals",
|
||||
"relatedUiObject": "Market Buy Order Signals",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Market Sell Order Signals",
|
||||
"relatedUiObject": "Market Sell Order Signals",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Available Signals->"
|
||||
},
|
||||
"propertyNameAtParent": "openStageSignals",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "limitBuyOrderSignals",
|
||||
"type": "array",
|
||||
"childType": "Limit Buy Order Signals",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "limitSellOrderSignals",
|
||||
"type": "array",
|
||||
"childType": "Limit Sell Order Signals",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "marketBuyOrderSignals",
|
||||
"type": "array",
|
||||
"childType": "Market Buy Order Signals",
|
||||
"autoAdd": false
|
||||
},
|
||||
{
|
||||
"name": "marketSellOrderSignals",
|
||||
"type": "array",
|
||||
"childType": "Market Sell Order Signals",
|
||||
"autoAdd": false
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"type": "Take Position Signal",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"actionFunction": "uiObject.configEditor.activate",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Trigger Stage Signals->"
|
||||
},
|
||||
"propertyNameAtParent": "takePositionSignal",
|
||||
"childrenNodesProperties": []
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"type": "Trigger Off Signal",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"actionFunction": "uiObject.configEditor.activate",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Trigger Stage Signals->"
|
||||
},
|
||||
"propertyNameAtParent": "triggerOffSignal",
|
||||
"childrenNodesProperties": []
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
{
|
||||
"type": "Trigger On Signal",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"actionFunction": "uiObject.configEditor.activate",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Trigger Stage Signals->"
|
||||
},
|
||||
"propertyNameAtParent": "triggerOnSignal",
|
||||
"childrenNodesProperties": []
|
||||
}
|
||||
@@ -0,0 +1,84 @@
|
||||
{
|
||||
"type": "Trigger Stage Signals",
|
||||
"menuItems": [
|
||||
{
|
||||
"action": "Configure",
|
||||
"actionFunction": "uiObject.configEditor.activate",
|
||||
"label": "Configure",
|
||||
"iconPathOn": "configuration",
|
||||
"iconPathOff": "configuration"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "triggerOnSignal",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Trigger On Signal",
|
||||
"relatedUiObject": "Trigger On Signal",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "triggerOffSignal",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Trigger Off Signal",
|
||||
"relatedUiObject": "Trigger Off Signal",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Add UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"disableIfPropertyIsDefined": true,
|
||||
"propertyToCheckFor": "takePositionSignal",
|
||||
"actionFunction": "payload.executeAction",
|
||||
"label": "Add Take Position Signal",
|
||||
"relatedUiObject": "Take Position Signal",
|
||||
"relatedUiObjectProject": "Trading-Signals"
|
||||
},
|
||||
{
|
||||
"action": "Delete UI Object",
|
||||
"actionProject": "Visual-Scripting",
|
||||
"askConfirmation": true,
|
||||
"confirmationLabel": "Confirm to Delete",
|
||||
"label": "Delete",
|
||||
"iconPathOn": "delete-entity",
|
||||
"iconPathOff": "delete-entity",
|
||||
"actionFunction": "payload.executeAction"
|
||||
}
|
||||
],
|
||||
"editors": {
|
||||
"config": true
|
||||
},
|
||||
"initialValues": {
|
||||
"config": "{}"
|
||||
},
|
||||
"addLeftIcons": true,
|
||||
"level": 2,
|
||||
"attachingRules": {
|
||||
"compatibleTypes": "->Available Signals->"
|
||||
},
|
||||
"propertyNameAtParent": "triggerStageSignals",
|
||||
"childrenNodesProperties": [
|
||||
{
|
||||
"name": "triggerOnSignal",
|
||||
"type": "node",
|
||||
"childType": "Trigger On Signal",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "triggerOffSignal",
|
||||
"type": "node",
|
||||
"childType": "Trigger Off Signal",
|
||||
"autoAdd": true
|
||||
},
|
||||
{
|
||||
"name": "takePositionSignal",
|
||||
"type": "node",
|
||||
"childType": "Take Position Signal",
|
||||
"autoAdd": true
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,128 @@
|
||||
exports.newTradingSignalsBotModulesTradingSignals = function (processIndex) {
|
||||
|
||||
let thisObject = {
|
||||
makeAnnouncements: makeAnnouncements,
|
||||
initialize: initialize,
|
||||
finalize: finalize
|
||||
}
|
||||
|
||||
let tradingSystem
|
||||
let tradingEngine
|
||||
let sessionParameters
|
||||
let taskParameters
|
||||
|
||||
return thisObject
|
||||
|
||||
function initialize() {
|
||||
tradingSystem = TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.tradingSystem
|
||||
tradingEngine = TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SIMULATION_STATE.tradingEngine
|
||||
sessionParameters = TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.tradingParameters
|
||||
|
||||
taskParameters = {
|
||||
exchange: TS.projects.foundations.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.parentNode.parentNode.name,
|
||||
market: TS.projects.foundations.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.baseAsset.referenceParent.config.codeName +
|
||||
'/' +
|
||||
TS.projects.foundations.globals.taskConstants.TASK_NODE.parentNode.parentNode.parentNode.referenceParent.quotedAsset.referenceParent.config.codeName
|
||||
}
|
||||
}
|
||||
|
||||
function finalize() {
|
||||
tradingSystem = undefined
|
||||
tradingEngine = undefined
|
||||
sessionParameters = undefined
|
||||
taskParameters = undefined
|
||||
TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.messagesSent = undefined
|
||||
}
|
||||
|
||||
function makeAnnouncements(node, status='Open') {
|
||||
if (node === undefined) { return }
|
||||
if (node.announcements === undefined) { return }
|
||||
|
||||
for (let i = 0; i < node.announcements.length; i++) {
|
||||
let announcement = node.announcements[i]
|
||||
let canAnnounce = true
|
||||
|
||||
// Check configuration to see if Announcement should be run at Enter or Exit of Node
|
||||
// set defaults, protect against empty configurations or missing values
|
||||
let onEnter = true
|
||||
let onExit = false
|
||||
if (announcement.config.onEnter !== undefined) {
|
||||
onEnter = announcement.config.onEnter
|
||||
}
|
||||
if (announcement.config.onExit !== undefined) {
|
||||
onExit = announcement.config.onExit
|
||||
if (announcement.config.onEnter === undefined) {
|
||||
onEnter = false
|
||||
}
|
||||
}
|
||||
if ((status === 'Open' && onEnter) || (status === 'Closed' && onExit)) {
|
||||
canAnnounce = true
|
||||
} else {
|
||||
canAnnounce = false
|
||||
}
|
||||
|
||||
if (announcement.announcementCondition !== undefined) {
|
||||
let conditionValue
|
||||
try {
|
||||
conditionValue = eval(announcement.announcementCondition.code)
|
||||
} catch (err) {
|
||||
|
||||
const message = 'Announcement Condition Evaluation Error'
|
||||
let docs = {
|
||||
project: 'Foundations',
|
||||
category: 'Topic',
|
||||
type: 'TS LF Trading Bot Error - ' + message,
|
||||
placeholder: {}
|
||||
}
|
||||
|
||||
TS.projects.education.utilities.docsFunctions.buildPlaceholder(docs, err, announcement.announcementCondition.name, announcement.announcementCondition.code, undefined, undefined, undefined)
|
||||
|
||||
tradingSystem.addError([announcement.announcementCondition.id, err.message, docs])
|
||||
}
|
||||
if (conditionValue !== true) { canAnnounce = false }
|
||||
}
|
||||
if (canAnnounce === true) {
|
||||
let text = announcement.config.text
|
||||
if (announcement.announcementFormula !== undefined) {
|
||||
let formulaValue
|
||||
let errorMessage
|
||||
|
||||
try {
|
||||
formulaValue = eval(announcement.announcementFormula.code)
|
||||
} catch (err) {
|
||||
|
||||
errorMessage = err.message
|
||||
const message = 'Announcement Formula Evaluation Error'
|
||||
let docs = {
|
||||
project: 'Foundations',
|
||||
category: 'Topic',
|
||||
type: 'TS LF Trading Bot Error - ' + message,
|
||||
placeholder: {}
|
||||
}
|
||||
|
||||
TS.projects.education.utilities.docsFunctions.buildPlaceholder(docs, err, announcement.announcementFormula.name, announcement.announcementFormula.code, undefined, undefined, undefined)
|
||||
|
||||
tradingSystem.addError([announcement.announcementFormula.id, err.message, docs])
|
||||
}
|
||||
if (errorMessage == undefined) { text = formulaValue }
|
||||
}
|
||||
|
||||
if (TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots !== undefined) {
|
||||
TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots.announce(text)
|
||||
tradingSystem.announcements.push([announcement.id, text])
|
||||
} else {
|
||||
|
||||
const message = 'Social Bots Node Missing'
|
||||
let docs = {
|
||||
project: 'Foundations',
|
||||
category: 'Topic',
|
||||
type: 'TS LF Trading Bot Error - ' + message,
|
||||
placeholder: {}
|
||||
}
|
||||
|
||||
tradingSystem.addError([TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.id, message, docs])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
function newSocialBotsActionSwitch() {
|
||||
|
||||
let thisObject = {
|
||||
executeAction: executeAction,
|
||||
initialize: initialize,
|
||||
finalize: finalize
|
||||
}
|
||||
|
||||
return thisObject
|
||||
|
||||
function finalize() {
|
||||
|
||||
}
|
||||
|
||||
function initialize() {
|
||||
/* Nothing to initialize since a Function Library does not hold any state. */
|
||||
}
|
||||
|
||||
async function executeAction(action) {
|
||||
switch (action.name) {
|
||||
case 'Send Telegram Test Message':
|
||||
{
|
||||
UI.projects.socialBots.functionLibraries.socialBotsFunctions.sendTelegramTestMessage(action.node, action.callBackFunction)
|
||||
}
|
||||
break
|
||||
default: {
|
||||
console.log("[WARN] Action sent to Social-Bots Action Switch does not belong here. Verify at the App Schema file of the node that triggered this action that the actionProject is pointing to the right project. -> Action = " + action.name + " -> Action Node Name = " + action.node.name)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
function newSocialBotsFunctionLibraryTradingSignalsFunctions() {
|
||||
let thisObject = {
|
||||
sendTelegramTestMessage: sendTelegramTestMessage
|
||||
}
|
||||
|
||||
return thisObject
|
||||
|
||||
function sendTelegramTestMessage(node, callBackFunction) {
|
||||
|
||||
let botToken = UI.projects.visualScripting.utilities.nodeConfig.loadConfigProperty(node.payload, 'botToken')
|
||||
let chatId = UI.projects.visualScripting.utilities.nodeConfig.loadConfigProperty(node.payload, 'chatId')
|
||||
|
||||
if (botToken === undefined) {
|
||||
node.payload.uiObject.setErrorMessage('botToken parameter not defined.')
|
||||
callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE)
|
||||
return
|
||||
}
|
||||
|
||||
if (chatId === undefined) {
|
||||
node.payload.uiObject.setErrorMessage('chatId parameter not defined.')
|
||||
callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE)
|
||||
return
|
||||
}
|
||||
|
||||
let params = {
|
||||
text: "Test Message from Superalgos",
|
||||
chat_id: chatId
|
||||
}
|
||||
|
||||
httpRequestJSON(JSON.stringify(params),"https://api.telegram.org/bot" + botToken + "/sendMessage", onResponse)
|
||||
|
||||
function onResponse(err) {
|
||||
if (err.result === GLOBAL.DEFAULT_OK_RESPONSE.result) {
|
||||
node.payload.uiObject.setInfoMessage('Telegram message sent.')
|
||||
callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE)
|
||||
} else {
|
||||
node.payload.uiObject.setErrorMessage('Could not send Telegram message. Error Response: ' + err.message)
|
||||
callBackFunction(GLOBAL.DEFAULT_FAIL_RESPONSE)
|
||||
}
|
||||
}
|
||||
|
||||
function httpRequestJSON(pContentToSend, pPath, callBackFunction) {
|
||||
let xmlHttpRequest = new XMLHttpRequest();
|
||||
xmlHttpRequest.onreadystatechange = function () {
|
||||
if (this.readyState === 4 && this.status === 200) {
|
||||
callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE, xmlHttpRequest.responseText);
|
||||
return;
|
||||
} else if (this.readyState === 4 && (this.status === 404 || this.status === 401 || this.status === 400)) {
|
||||
callBackFunction({
|
||||
result: "Fail",
|
||||
message: JSON.parse(xmlHttpRequest.responseText).description,
|
||||
code: JSON.parse(xmlHttpRequest.responseText).error_code
|
||||
});
|
||||
return;
|
||||
}
|
||||
};
|
||||
|
||||
if (pContentToSend === undefined) {
|
||||
xmlHttpRequest.open("GET", pPath, true);
|
||||
xmlHttpRequest.send();
|
||||
} else {
|
||||
try {
|
||||
let blob = new Blob([pContentToSend], { type: 'application/json' });
|
||||
xmlHttpRequest.open("POST", pPath, true);
|
||||
xmlHttpRequest.send(blob);
|
||||
} catch (err) {
|
||||
if (ERROR_LOG === true) { console.log(spacePad(MODULE_NAME, 50) + " : " + "[ERROR] callServer -> err.message = " & err.message); }
|
||||
callBackFunction({ result: "Fail", message: err.message })
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||