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

This commit is contained in:
Marcos Rivas committed 2021-11-25 20:09:44 -03:00
commit 071a07a8e3
68 files changed
+2141 -996

No files matched your search

+44
View File
@@ -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)
+16 -5
View File
@@ -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->' +
Binary file not shown.

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,
File diff suppressed because it is too large. Load diff
@@ -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.
*/
+27 -41
View File
@@ -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
}
}
}
}
}
}
+25
View File
@@ -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": ""
}
]
}
}
]
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

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 })
}
}
}
}
}