Merge branch 'Superalgos:develop' into develop

This commit is contained in:
B Harrell authored and GitHub committed 2021-10-11 07:53:37 -05:00
commit c4f775b684
94 files changed
+9014 -5972

No files matched your search

+13
View File
@@ -485,6 +485,19 @@ function newCanvas() {
return
}
if (
event.shiftKey === true &&
(event.ctrlKey === true || event.metaKey === true) &&
(event.key === UI.projects.foundations.spaces.floatingSpace.settings.shortcuts.rescueFloatingObjectToMouse || event.key === UI.projects.foundations.spaces.floatingSpace.settings.shortcuts.rescueFloatingObjectToMouse.toLowerCase())
) {
UI.projects.foundations.spaces.floatingSpace.rescueFloatingObjectToMouse(thisObject.mouse.position)
if (event.preventDefault !== undefined) {
event.preventDefault()
}
return
}
let nodeOnFocus = await UI.projects.foundations.spaces.designSpace.workspace.getNodeThatIsOnFocus()
if (nodeOnFocus !== undefined) {
if (nodeOnFocus.payload.uiObject.codeEditor !== undefined) {
+1 -1
View File
@@ -9,7 +9,7 @@ function getSchemaDocument (node, project) {
if (APP_SCHEMA !== undefined) {
return SCHEMAS_BY_PROJECT.get(project).map.appSchema.get(node.type)
} else {
console.log('[ERROR] Could not get APP Scchema for project ' + node.project)
console.log('[ERROR] Could not get APP Schema for project ' + node.project)
}
}
@@ -17,7 +17,7 @@ exports.newAlgorithmicTradingBotModulesTradingOrders = function (processIndex) {
let sessionParameters
let exchangeAPIModuleObject = TS.projects.algorithmicTrading.botModules.exchangeAPI.newAlgorithmicTradingBotModulesExchangeAPI(processIndex)
let announcementsModuleObject = TS.projects.foundations.botModules.announcements.newFoundationsBotModulesAnnouncements(processIndex)
let announcementsModuleObject = TS.projects.socialBots.botModules.announcements.newSocialBotsBotModulesAnnouncements(processIndex)
return thisObject
@@ -24,7 +24,7 @@ exports.newAlgorithmicTradingBotModulesTradingStages = function (processIndex) {
let tradingStrategyModuleObject = TS.projects.algorithmicTrading.botModules.tradingStrategy.newAlgorithmicTradingBotModulesTradingStrategy(processIndex)
let tradingPositionModuleObject = TS.projects.algorithmicTrading.botModules.tradingPosition.newAlgorithmicTradingBotModulesTradingPosition(processIndex)
let tradingExecutionModuleObject = TS.projects.algorithmicTrading.botModules.tradingExecution.newAlgorithmicTradingBotModulesTradingExecution(processIndex)
let announcementsModuleObject = TS.projects.foundations.botModules.announcements.newFoundationsBotModulesAnnouncements(processIndex)
let announcementsModuleObject = TS.projects.socialBots.botModules.announcements.newSocialBotsBotModulesAnnouncements(processIndex)
let snapshotsModuleObject = TS.projects.algorithmicTrading.botModules.snapshots.newAlgorithmicTradingBotModulesSnapshots(processIndex)
let tradingEpisodeModuleObject = TS.projects.algorithmicTrading.botModules.tradingEpisode.newAlgorithmicTradingBotModulesTradingEpisode(processIndex)
@@ -7,7 +7,7 @@
}
TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SOCIAL_BOTS_MODULE =
TS.projects.foundations.botModules.socialBots.newFoundationsBotModulesSocialBots(processIndex)
TS.projects.socialBots.botModules.socialBots.newSocialBotsBotModulesSocialBots(processIndex)
return thisObject;
File diff suppressed because it is too large. Load diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

@@ -43,6 +43,13 @@
"dontShowAtFullscreen": true,
"actionFunction": "uiObject.configEditor.activate"
},
{
"action": "Add UI Object",
"label": "Add Social Bots",
"relatedUiObject": "Social Bots",
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Add Missing Children",
"label": "Add Missing Children",
@@ -96,7 +103,8 @@
{
"name": "socialBots",
"type": "node",
"childType": "Social Bots"
"childType": "Social Bots",
"project": "Social-Bots"
}
],
"propertyNameAtParent": "session"
@@ -47,7 +47,8 @@
"action": "Add UI Object",
"label": "Add Social Bots",
"relatedUiObject": "Social Bots",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Add Missing Children",
@@ -105,7 +106,8 @@
{
"name": "socialBots",
"type": "node",
"childType": "Social Bots"
"childType": "Social Bots",
"project": "Social-Bots"
}
],
"propertyNameAtParent": "session"
@@ -11,7 +11,8 @@
"action": "Add UI Object",
"label": "Add Announcement",
"relatedUiObject": "Announcement",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Delete UI Object",
@@ -38,7 +39,8 @@
{
"name": "announcements",
"type": "array",
"childType": "Announcement"
"childType": "Announcement",
"project": "Social-Bots"
}
],
"propertyNameAtParent": "cancelOrderEvent"
@@ -11,7 +11,8 @@
"action": "Add UI Object",
"label": "Add Announcement",
"relatedUiObject": "Announcement",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Delete UI Object",
@@ -38,7 +39,8 @@
{
"name": "announcements",
"type": "array",
"childType": "Announcement"
"childType": "Announcement",
"project": "Social-Bots"
}
],
"propertyNameAtParent": "closeStageEvent"
@@ -18,7 +18,8 @@
"action": "Add UI Object",
"label": "Add Announcement",
"relatedUiObject": "Announcement",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Delete UI Object",
@@ -63,7 +64,8 @@
{
"name": "announcements",
"type": "array",
"childType": "Announcement"
"childType": "Announcement",
"project": "Social-Bots"
},
{
"name": "userDefinedCode",
@@ -11,7 +11,8 @@
"action": "Add UI Object",
"label": "Add Announcement",
"relatedUiObject": "Announcement",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Delete UI Object",
@@ -38,7 +39,8 @@
{
"name": "announcements",
"type": "array",
"childType": "Announcement"
"childType": "Announcement",
"project": "Social-Bots"
}
],
"propertyNameAtParent": "createOrderEvent"
@@ -47,7 +47,8 @@
"action": "Add UI Object",
"label": "Add Social Bots",
"relatedUiObject": "Social Bots",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Add Missing Children",
@@ -108,7 +109,8 @@
{
"name": "socialBots",
"type": "node",
"childType": "Social Bots"
"childType": "Social Bots",
"project": "Social-Bots"
}
],
"propertyNameAtParent": "session"
@@ -43,6 +43,13 @@
"dontShowAtFullscreen": true,
"actionFunction": "uiObject.configEditor.activate"
},
{
"action": "Add UI Object",
"label": "Add Social Bots",
"relatedUiObject": "Social Bots",
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Add Missing Children",
"label": "Add Missing Children",
@@ -96,7 +103,8 @@
{
"name": "socialBots",
"type": "node",
"childType": "Social Bots"
"childType": "Social Bots",
"project": "Social-Bots"
}
],
"propertyNameAtParent": "session"
@@ -47,7 +47,8 @@
"action": "Add UI Object",
"label": "Add Social Bots",
"relatedUiObject": "Social Bots",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Add Missing Children",
@@ -108,7 +109,8 @@
{
"name": "socialBots",
"type": "node",
"childType": "Social Bots"
"childType": "Social Bots",
"project": "Social-Bots"
}
],
"propertyNameAtParent": "session"
@@ -11,7 +11,8 @@
"action": "Add UI Object",
"label": "Add Announcement",
"relatedUiObject": "Announcement",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Delete UI Object",
@@ -44,7 +45,8 @@
{
"name": "announcements",
"type": "array",
"childType": "Announcement"
"childType": "Announcement",
"project": "Social-Bots"
},
{
"name": "userDefinedCode",
@@ -11,7 +11,8 @@
"action": "Add UI Object",
"label": "Add Announcement",
"relatedUiObject": "Announcement",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Delete UI Object",
@@ -41,7 +42,8 @@
{
"name": "announcements",
"type": "array",
"childType": "Announcement"
"childType": "Announcement",
"project": "Social-Bots"
}
],
"propertyNameAtParent": "moveToPhaseEvents"
@@ -11,7 +11,8 @@
"action": "Add UI Object",
"label": "Add Announcement",
"relatedUiObject": "Announcement",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Delete UI Object",
@@ -38,7 +39,8 @@
{
"name": "announcements",
"type": "array",
"childType": "Announcement"
"childType": "Announcement",
"project": "Social-Bots"
}
],
"propertyNameAtParent": "nextPhaseEvent"
@@ -18,7 +18,8 @@
"action": "Add UI Object",
"label": "Add Announcement",
"relatedUiObject": "Announcement",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Delete UI Object",
@@ -63,7 +64,8 @@
{
"name": "announcements",
"type": "array",
"childType": "Announcement"
"childType": "Announcement",
"project": "Social-Bots"
},
{
"name": "userDefinedCode",
@@ -47,7 +47,8 @@
"action": "Add UI Object",
"label": "Add Social Bots",
"relatedUiObject": "Social Bots",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Add Missing Children",
@@ -108,7 +109,8 @@
{
"name": "socialBots",
"type": "node",
"childType": "Social Bots"
"childType": "Social Bots",
"project": "Social-Bots"
}
],
"propertyNameAtParent": "session"
@@ -21,13 +21,15 @@
"action": "Add UI Object",
"label": "Add Move To Phase Event",
"relatedUiObject": "Move To Phase Event",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Add UI Object",
"label": "Add Announcement",
"relatedUiObject": "Announcement",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Delete UI Object",
@@ -65,7 +67,8 @@
{
"name": "announcements",
"type": "array",
"childType": "Announcement"
"childType": "Announcement",
"project": "Social-Bots"
}
],
"propertyNameAtParent": "phases"
@@ -11,7 +11,8 @@
"action": "Add UI Object",
"label": "Add Announcement",
"relatedUiObject": "Announcement",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Delete UI Object",
@@ -38,7 +39,8 @@
{
"name": "announcements",
"type": "array",
"childType": "Announcement"
"childType": "Announcement",
"project": "Social-Bots"
}
],
"propertyNameAtParent": "takePosition"
@@ -11,7 +11,8 @@
"action": "Add UI Object",
"label": "Add Announcement",
"relatedUiObject": "Announcement",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Delete UI Object",
@@ -38,7 +39,8 @@
{
"name": "announcements",
"type": "array",
"childType": "Announcement"
"childType": "Announcement",
"project": "Social-Bots"
}
],
"propertyNameAtParent": "triggerOff"
@@ -11,7 +11,8 @@
"action": "Add UI Object",
"label": "Add Announcement",
"relatedUiObject": "Announcement",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Delete UI Object",
@@ -38,7 +39,8 @@
{
"name": "announcements",
"type": "array",
"childType": "Announcement"
"childType": "Announcement",
"project": "Social-Bots"
}
],
"propertyNameAtParent": "triggerOn"
@@ -11,7 +11,8 @@
"action": "Add UI Object",
"label": "Add Announcement",
"relatedUiObject": "Announcement",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Delete UI Object",
@@ -50,7 +51,8 @@
{
"name": "announcements",
"type": "array",
"childType": "Announcement"
"childType": "Announcement",
"project": "Social-Bots"
},
{
"name": "userDefinedCode",
@@ -1,94 +1,99 @@
{
"type": "Crypto Exchange",
"definition": {
"text": "A crypto exchange node holds the definitions of assets and markets in a specific exchange.",
"translations": [
{
"language": "ES",
"text": "Un nodo crypto exchangecontiene las definiciones de assets y mercados en un exchange.",
"updated": 1628205315370
}
]
},
"paragraphs": [
{
"style": "Block",
"text": "Configuring"
},
{
"style": "Title",
"text": "Tested Exchanges",
"updated": 1615200855230
},
{
"style": "Text",
"text": "In theory, Superalgos supports dozens of exchanges. However, each exchange must go through a testing process, as not all of them conform to the standard proposed by the CCXT library.",
"updated": 1615201479524
},
{
"style": "List",
"text": "Binance Test Status",
"updated": 1615203667257
},
{
"style": "List",
"text": "Binance-US Test Status"
},
{
"style": "List",
"text": "Bitfinex Test Status"
},
{
"style": "List",
"text": "Bittrex Test Status"
},
{
"style": "List",
"text": "CoinbasePro Test Status"
},
{
"style": "List",
"text": "FTX Test Status",
"updated": 1615203669878
},
{
"style": "List",
"text": "Kraken Test Status",
"updated": 1615453046113
},
{
"style": "List",
"text": "Kucoin Test Status"
},
{
"style": "List",
"text": "Luno Test Status"
},
{
"style": "Title",
"text": "Crypto Exchange Configuration"
},
{
"style": "Text",
"text": "Each exchange may require a very specific configuration. This is determined during the exchange testing process. Consult the page of each exchange as listed above. If you are interested in testing a new exchange, go to the How to Test New Exchanges page.",
"updated": 1615201685376
},
{
"style": "Subtitle",
"text": "Properties",
"updated": 1609771684679
},
{
"style": "List",
"text": "codeName is the name of the exchange as handled in the code of the system."
},
{
"style": "List",
"text": "sandBox setting this parameter to true allows SuperAlgos to perform live trading on the exchanges sandbox or testnet if one is available."
},
{
"style": "List",
"text": "API holds a series of definitions used only in the case in which the sensor bot fetches trades (using the Historic-Trades process) instead of the OHLCV process that fetches one-minute candles and is the current default. In such a case, finding the right set of parameters to work with a specific exchange may be challenging, nd involves understanding how the exchanges API and the CCXT Library API work. In other words, there is no hard rule as of what each of the values should be. Determining each of this values requires exploring the exchange's API documentation, as well as the documentation of the CCXT Library."
}
]
{
"type": "Crypto Exchange",
"definition": {
"text": "A crypto exchange node holds the definitions of assets and markets in a specific exchange.",
"translations": [
{
"language": "ES",
"text": "Un nodo crypto exchangecontiene las definiciones de assets y mercados en un exchange.",
"updated": 1628205315370
}
]
},
"paragraphs": [
{
"style": "Block",
"text": "Configuring"
},
{
"style": "Title",
"text": "Tested Exchanges",
"updated": 1615200855230
},
{
"style": "Text",
"text": "In theory, Superalgos supports dozens of exchanges. However, each exchange must go through a testing process, as not all of them conform to the standard proposed by the CCXT library.",
"updated": 1615201479524
},
{
"style": "List",
"text": "Binance Test Status",
"updated": 1615203667257
},
{
"style": "List",
"text": "Binance Futures USDⓈ-M/COIN-M Test Status",
"updated": 1615203667257
},
{
"style": "List",
"text": "Binance-US Test Status"
},
{
"style": "List",
"text": "Bitfinex Test Status"
},
{
"style": "List",
"text": "Bittrex Test Status"
},
{
"style": "List",
"text": "CoinbasePro Test Status"
},
{
"style": "List",
"text": "FTX Test Status",
"updated": 1615203669878
},
{
"style": "List",
"text": "Kraken Test Status",
"updated": 1615453046113
},
{
"style": "List",
"text": "Kucoin Test Status"
},
{
"style": "List",
"text": "Luno Test Status"
},
{
"style": "Title",
"text": "Crypto Exchange Configuration"
},
{
"style": "Text",
"text": "Each exchange may require a very specific configuration. This is determined during the exchange testing process. Consult the page of each exchange as listed above. If you are interested in testing a new exchange, go to the How to Test New Exchanges page.",
"updated": 1615201685376
},
{
"style": "Subtitle",
"text": "Properties",
"updated": 1609771684679
},
{
"style": "List",
"text": "codeName is the name of the exchange as handled in the code of the system."
},
{
"style": "List",
"text": "sandBox setting this parameter to true allows SuperAlgos to perform live trading on the exchanges sandbox or testnet if one is available."
},
{
"style": "List",
"text": "API holds a series of definitions used only in the case in which the sensor bot fetches trades (using the Historic-Trades process) instead of the OHLCV process that fetches one-minute candles and is the current default. In such a case, finding the right set of parameters to work with a specific exchange may be challenging, nd involves understanding how the exchanges API and the CCXT Library API work. In other words, there is no hard rule as of what each of the values should be. Determining each of this values requires exploring the exchange's API documentation, as well as the documentation of the CCXT Library."
}
]
}
@@ -0,0 +1,52 @@
{
"review": "Superalgos Project Review",
"pageNumber": 29,
"type": "Superalgos Review - A vast system without borders",
"definition": {
"text": "Superalgos review by eNut - No borders, all the power for your crypto",
"updated": 1633367241439
},
"paragraphs": [
{
"style": "Text",
"text": "Superalgos is a vast system to control you assets in a way that only you alone have the keys to you crypto. The visualization of the code makes it more readable and certainly more understandable. This vast piece software base might just be what everybody needs to take control of your assets and learn how to use them.",
"updated": 1633367092118
},
{
"style": "Text",
"text": "Fair warning, for non coders it might be a lot to take in, a steep learning curve. The upside: you are only limited by your own imagination."
},
{
"style": "Text",
"text": "Like the toturial mentions: your not litarally bending time and space, but it does feel like it."
},
{
"style": "Callout",
"text": "So I, like everyone should, take a plunge and dive right into:"
},
{
"style": "List",
"text": "Assets under your control, no permissions needed."
},
{
"style": "List",
"text": "A vast system, only limited by what you can think of."
},
{
"style": "List",
"text": "An active community with people who know what they are talking about."
},
{
"style": "List",
"text": "The future"
},
{
"style": "Text",
"text": "I'll try to update this in the future, to let you know how the dive is coming along."
},
{
"style": "Text",
"text": "eNut"
}
]
}
@@ -0,0 +1,15 @@
{
"review": "Superalgos Project Review",
"pageNumber": 30,
"type": "Superalgos Review - Very nice piece of software. And it's free open source. Amazed!",
"definition": {
"text": "Very nice piece of software. And it's free open source. Amazed!",
"updated": 1633616034785
},
"paragraphs": [
{
"style": "Text",
"text": "Right click and Edit to enter edit mode and change this text. ENTER to write new paragraphs. ESC to exit edit mode. Then you can use docs.save to save your changes and app.contribute to send it to the main repository."
}
]
}
@@ -0,0 +1,20 @@
{
"review": "Superalgos Project Review",
"pageNumber": 31,
"type": "Superalgos Review - My first Superalgos review",
"definition": {
"text": "I'm just grinding the tutorials for now, can't wait to run some backtests. I'm impressed how complex but also easy to use this software is. As a developer i am also higly motivated to contribute to the project.",
"updated": 1633844141741
},
"paragraphs": [
{
"style": "Text",
"text": "Regards, ",
"updated": 1633844210344
},
{
"style": "Text",
"text": "primoz990"
}
]
}
@@ -3,7 +3,7 @@
"pageNumber": 2,
"type": "Binance Test Status",
"definition": {
"text": "Binance is fully tested for data mining and trading.",
"text": "Binance Exchange, Spot market is fully tested for data mining and trading. Margin account trading under review & testing phase and prioritized on users requirement.",
"updated": 1615141847424
},
"paragraphs": [
@@ -29,12 +29,12 @@
},
{
"style": "List",
"text": "Comments: Fully tested. Starting with Binance is recommended as the experience is seamless.",
"text": "Comments: Fully tested. Starting with Binance is recommended as the experience is seamless. Sandbox/testnet facility available but not yet reviewed as it requires independent exchange API keys.",
"updated": 1615142951363
},
{
"style": "Title",
"text": "Configuration"
"style": "Success",
"text": "In order to be exchange friendly a utility has been provided to pre-download symbol ticker data, thus saving time & net download bandwidth usage. Please refer to the documentations provided.\n\thttps://github.com/PLuv/Exchange-Raw-Data-Superalgos"
},
{
"style": "Json",
@@ -0,0 +1,58 @@
{
"topic": "Tested Exchanges",
"pageNumber": 3,
"type": "Binance Futures USDⓈ-M/COIN-M Test Status",
"definition": {
"text": "Binance Futures Perpetual contracts are partially tested for data mining. Testing in progress for live trading. Note that Quarterly Contract trading will be tested in the future based on users requirement/demand.",
"updated": 1615141847424
},
"paragraphs": [
{
"style": "Title",
"text": "Properties",
"updated": 1615143100216
},
{
"style": "List",
"text": "1-min OHLCVs Capability: Yes. The ability to fetch historic data for backtesting purposes has been verified.",
"updated": 1616003523813
},
{
"style": "List",
"text": "Market History: Starting 2019/09/13 04:00 AM (UTC) for most stable coin perpetual contracts.",
"updated": 1615142912901
},
{
"style": "List",
"text": "Trading Capability: Currently under review and testing for both USDⓈ-M/COIN-M.",
"updated": 1616003541160
},
{
"style": "List",
"text": "Comments: Ensure that the correct market symbol codes are choosen (refer to Binance as symbols are added and withdrawn regularly). Sandbox/testnet facility available but not yet reviewed as it requires independent exchange API keys.",
"updated": 1615142951363
},
{
"style": "Title",
"text": "Configuration for USDⓈ-M"
},
{
"style": "Json",
"text": "{\n \"codeName\": \"binanceusdm\",\n \"API\": [\n {\n \"method\": \"fetchTrades\",\n \"fetchType\": \"by Id\",\n \"fetchTradesMethod\": \"publicGetHistoricalTrades\",\n \"firstId\": \"f\"\n }\n ]\n}",
"updated": 1615143066280
},
{
"style": "Title",
"text": "Configuration for COIN-M"
},
{
"style": "Json",
"text": "{\n \"codeName\": \"binancecoinm\",\n \"API\": [\n {\n \"method\": \"fetchTrades\",\n \"fetchType\": \"by Id\",\n \"fetchTradesMethod\": \"publicGetHistoricalTrades\",\n \"firstId\": \"f\"\n }\n ]\n}",
"updated": 1615143066280
},
{
"style": "Text",
"text": ""
}
]
}
@@ -1,49 +1,49 @@
{
"topic": "Tested Exchanges",
"pageNumber": 4,
"type": "Binance-US Test Status",
"definition": {
"text": "Binance US is tested for data mining and live trading",
"updated": 1616241967855
},
"paragraphs": [
{
"style": "Title",
"text": "Properties",
"updated": 1615143100216
},
{
"style": "List",
"text": "1-min OHLCVs Capability: Yes. The ability to fetch historic data for backtesting purposes has been verified",
"updated": 1616241978955
},
{
"style": "List",
"text": "Market History: Starting on Genuary 2020",
"updated": 1615210971704
},
{
"style": "List",
"text": "Trading Capability: Yes. The ability to run strategies in live-trading mode has been verified",
"updated": 1616241962902
},
{
"style": "List",
"text": "Comments: Raw Data mining can be slow due to exchange restrictions on their API that limit the number of data it can be requested via Rest API",
"updated": 1615205045729
},
{
"style": "Title",
"text": "Configuration"
},
{
"style": "Json",
"text": "{\n \"codeName\": \"binanceus\",\n \"API\": [\n {\n \"method\": \"fetchTrades\",\n \"fetchType\": \"by Id\",\n \"fetchTradesMethod\": \"publicGetHistoricalTrades\",\n \"firstId\": \"f\"\n }\n ]\n}",
"updated": 1615210940971
},
{
"style": "Text",
"text": ""
}
]
{
"topic": "Tested Exchanges",
"pageNumber": 4,
"type": "Binance-US Test Status",
"definition": {
"text": "Binance US is tested for data mining and live trading",
"updated": 1616241967855
},
"paragraphs": [
{
"style": "Title",
"text": "Properties",
"updated": 1615143100216
},
{
"style": "List",
"text": "1-min OHLCVs Capability: Yes. The ability to fetch historic data for backtesting purposes has been verified",
"updated": 1616241978955
},
{
"style": "List",
"text": "Market History: Starting on Genuary 2020",
"updated": 1615210971704
},
{
"style": "List",
"text": "Trading Capability: Yes. The ability to run strategies in live-trading mode has been verified",
"updated": 1616241962902
},
{
"style": "List",
"text": "Comments: Raw Data mining can be slow due to exchange restrictions on their API that limit the number of data it can be requested via Rest API",
"updated": 1615205045729
},
{
"style": "Title",
"text": "Configuration"
},
{
"style": "Json",
"text": "{\n \"codeName\": \"binanceus\",\n \"API\": [\n {\n \"method\": \"fetchTrades\",\n \"fetchType\": \"by Id\",\n \"fetchTradesMethod\": \"publicGetHistoricalTrades\",\n \"firstId\": \"f\"\n }\n ]\n}",
"updated": 1615210940971
},
{
"style": "Text",
"text": ""
}
]
}
@@ -0,0 +1,49 @@
{
"topic": "Tested Exchanges",
"pageNumber": 5,
"type": "FTX Test Status",
"definition": {
"text": "FTX is tested for data mining but not for live trading.",
"updated": 1616003850379
},
"paragraphs": [
{
"style": "Title",
"text": "Properties",
"updated": 1615143100216
},
{
"style": "List",
"text": "1-min OHLCVs Capability: Yes. The ability to fetch historic data for backtesting purposes has been verified.",
"updated": 1616003666832
},
{
"style": "List",
"text": "Market History: Starting on September 2019",
"updated": 1615204614502
},
{
"style": "List",
"text": "Trading Capability: Unknown. The ability to run strategies in live-trading mode has not been verified.",
"updated": 1616003699055
},
{
"style": "List",
"text": "Comments: Raw Data mining can be slow due to exchange restrictions on their API that limit the number of data it can be requested via Rest API",
"updated": 1615205045729
},
{
"style": "Title",
"text": "Configuration"
},
{
"style": "Json",
"text": "{\n \"codeName\": \"ftx\"\n}",
"updated": 1615204693035
},
{
"style": "Text",
"text": ""
}
]
}
@@ -0,0 +1,49 @@
{
"topic": "Tested Exchanges",
"pageNumber": 6,
"type": "Bitfinex Test Status",
"definition": {
"text": "Bitfinex is tested for data mining but not for live trading.",
"updated": 1616003876885
},
"paragraphs": [
{
"style": "Title",
"text": "Properties",
"updated": 1615143100216
},
{
"style": "List",
"text": "1-min OHLCVs Capability: Yes. The ability to fetch historic data for backtesting purposes has been verified.",
"updated": 1616003797511
},
{
"style": "List",
"text": "Market History: 1 year.",
"updated": 1616004049653
},
{
"style": "List",
"text": "Trading Capability: Unknown. The ability to run strategies in live-trading mode has not been verified.",
"updated": 1616003817998
},
{
"style": "List",
"text": "Comments: Raw Data mining can be slow due to exchange restrictions on their API that limit the number of data it can be requested via Rest API.",
"updated": 1616004065179
},
{
"style": "Title",
"text": "Configuration"
},
{
"style": "Json",
"text": "{\n \"codeName\": \"bitfinex\",\n \"API\": [\n {\n \"rateLimit\": 999\n }\n ]\n}",
"updated": 1615211032603
},
{
"style": "Text",
"text": ""
}
]
}
@@ -0,0 +1,49 @@
{
"topic": "Tested Exchanges",
"pageNumber": 7,
"type": "Kucoin Test Status",
"definition": {
"text": "Kucoin is tested for data mining and for live trading.",
"updated": 1632650068116
},
"paragraphs": [
{
"style": "Title",
"text": "Properties",
"updated": 1615143100216
},
{
"style": "List",
"text": "1-min OHLCVs Capability: Yes. The ability to fetch historic data for backtesting purposes has been verified.",
"updated": 1632650093003
},
{
"style": "List",
"text": "Market History: 1 day",
"updated": 1615211188110
},
{
"style": "List",
"text": "Trading Capability: Yes. The ability to run strategies in live-trading mode has been verified.",
"updated": 1632650205665
},
{
"style": "List",
"text": "Comments: This exchange has not yet fully tested but I'm currently live trading on SHIB-USDT pair. I will update this section when I will have had the opportunity to do a more in-depth test",
"updated": 1632650423168
},
{
"style": "Title",
"text": "Configuration"
},
{
"style": "Json",
"text": "{\n \"codeName\": \"kucoin\"\n}",
"updated": 1615211313657
},
{
"style": "Text",
"text": ""
}
]
}
@@ -0,0 +1,45 @@
{
"topic": "Tested Exchanges",
"pageNumber": 8,
"type": "Luno Test Status",
"definition": {
"text": "Luno is tested for data mining and for live trading - however, due to recent changes in their API, it has become virtually useless for back-testing, and not much better for live trading. See below for explanation.",
"updated": 1621587736536
},
"paragraphs": [
{
"style": "Title",
"text": "Properties",
"updated": 1615143100216
},
{
"style": "List",
"text": "1-min OHLCVs Capability: Yes - but with severe restrictions. The ability to fetch historic data for backtesting purposes has been now been severely restricted, since you can no longer fetch trades older than 24 hours.",
"updated": 1621587332130
},
{
"style": "List",
"text": "Trading Capability [**]: Yes - but with restrictions. The ability to run strategies in live-trading mode is now possible. Ensure that the version of the CCXT library being used by Superalgos is 1.42.77 or better - earlier versions of this library did not correctly apply the precision settings of the exchange in the amounts specified for creating orders.",
"updated": 1621587760053
},
{
"style": "List",
"text": "Comments: Raw Data mining is extremely slow due to exchange restrictions on their API that limit the number of data it can be requested via Rest API. One day of Raw Data used to take about 5 minutes to download. However, since a recent upgrade (somewhere around 15th May, 2021) it is no longer possible to retrieve raw trades older than 24 hours. This means that a start day must be fully specified (i.e. both date and time), and it must be less than 24 hours behind the current date/time. Keep this in mind when setting a start date. The reason for this is because they do not support fetching of OHCLV data - this data has to be compiled by fetching individual trades. The fetching of trades is limited to 100 trades per request, and the rate limit is 1 second. Furthermore, you will need to run data mining for at least 24 hours before being able to start running any trading.",
"updated": 1621587866572
},
{
"style": "Subtitle",
"text": "RECOMMENDATION: Luno is no longer suitable for use with SuperAlgos until such time that the Luno developers implement the correct API for retrieving OHLCV data.",
"updated": 1621588017824
},
{
"style": "Title",
"text": "Configuration"
},
{
"style": "Json",
"text": "{\n \"codeName\": \"luno\",\n \"API\": [\n {\n \"method\": \"fetch_ohlcv\",\n \"useFetchTradesForFetchOHLCVs\": true,\n \"maxTradesPerFetch\": 100,\n \"limit\": 200,\n \"rateLimit\": 1100\n }\n ]\n}",
"updated": 1615211372349
}
]
}
@@ -0,0 +1,49 @@
{
"topic": "Tested Exchanges",
"pageNumber": 9,
"type": "Kraken Test Status",
"definition": {
"text": "Kraken is tested for data mining but not for live trading.",
"updated": 1616005542987
},
"paragraphs": [
{
"style": "Title",
"text": "Properties",
"updated": 1615143100216
},
{
"style": "List",
"text": "1-min OHLCVs Capability: Yes. The ability to fetch historic data for backtesting purposes has been verified.",
"updated": 1616005497164
},
{
"style": "List",
"text": "Market History: Unknown",
"updated": 1615204614502
},
{
"style": "List",
"text": "Trading Capability [**]: Unknown. The ability to run strategies in live-trading mode has not been verified.",
"updated": 1616005523609
},
{
"style": "List",
"text": "Comments: With standard settings only one day worth of Raw Data is fetched. To retrieve Raw Data in Kraken, pairs in config are reversed. Backtesting and Live Trading behaviour unknown",
"updated": 1615278620667
},
{
"style": "Title",
"text": "Configuration"
},
{
"style": "Json",
"text": "{\n \"codeName\": \"USDT/BTC\"\n}",
"updated": 1615278483740
},
{
"style": "Text",
"text": ""
}
]
}
@@ -0,0 +1,49 @@
{
"topic": "Tested Exchanges",
"pageNumber": 10,
"type": "Bittrex Test Status",
"definition": {
"text": "Bittrex is not fully tested for data mining nor for live trading.",
"updated": 1616005578529
},
"paragraphs": [
{
"style": "Title",
"text": "Properties",
"updated": 1615143100216
},
{
"style": "List",
"text": "1-min OHLCVs Capability: Unknown. The ability to fetch historic data for backtesting purposes has not been verified.",
"updated": 1616005666238
},
{
"style": "List",
"text": "Market History: Unknown.",
"updated": 1616005647200
},
{
"style": "List",
"text": "Trading Capability [**]: Unknown. The ability to run strategies in live-trading mode has not been verified.",
"updated": 1616005641922
},
{
"style": "List",
"text": "Comments: Raw Data mining it's extremely slow due to API restriction",
"updated": 1615450349464
},
{
"style": "Title",
"text": "Configuration"
},
{
"style": "Json",
"text": "{\n \"codeName\": \"bittrex\",\n \"API\": [\n {\n \"method\": \"fetch_ohlcv\",\n \"limit\": 2\n }\n ]\n}",
"updated": 1615450253869
},
{
"style": "Text",
"text": ""
}
]
}
@@ -0,0 +1,56 @@
{
"topic": "Tested Exchanges",
"pageNumber": "11",
"type": "Bitstamp Test Status",
"definition": {
"text": "Bitstamp is fully tested for data mining and trading.",
"updated": 1615141847424
},
"paragraphs": [
{
"style": "Title",
"text": "Properties",
"updated": 1615143100216
},
{
"style": "List",
"text": "1-min OHLCVs Capability [*]: Yes."
},
{
"style": "List",
"text": "Market History: Starting on September 2017.",
"updated": 1615142912901
},
{
"style": "List",
"text": "Trading Capability [**]: Yes.",
"updated": 1615143016205
},
{
"style": "List",
"text": "Comments: Fully tested. ",
"updated": 1615142951363
},
{
"style": "Text",
"text": "[*] The ability to fetch historic data for backtesting purposes has been verified."
},
{
"style": "Text",
"text": "[**] The ability to run strategies in live-trading mode has been verified."
},
{
"style": "Title",
"text": "Configuration"
},
{
"style": "Json",
"text": "{\n \"codeName\": \"bitstamp\",\n \"API\": [\n {\n \"method\": \"fetchTrades\",\n \"fetchType\": \"by Id\",\n \"fetchTradesMethod\": \"publicGetHistoricalTrades\",\n \"firstId\": \"f\"\n }\n ]\n}",
"updated": 1616805179437
},
{
"style": "Text",
"text": ""
}
]
}
@@ -0,0 +1,57 @@
{
"topic": "Tested Exchanges",
"pageNumber": 12,
"type": "CoinbasePro Test Status",
"definition": {
"text": "Coinbase Pro is not fully tested for data mining nor for live trading.",
"updated": 1616005773803
},
"paragraphs": [
{
"style": "Title",
"text": "Properties",
"updated": 1615143100216
},
{
"style": "List",
"text": "1-min OHLCVs Capability: Yes. Backtesting and Paper trading are functional. The data mining process is extremely slow when retrieving full history due to API limits but it is adequate for live trading purposes.",
"updated": 1617935711274
},
{
"style": "List",
"text": "Market History: Full extent is unknown, however it is at least 2020-01-01.",
"updated": 1617935743856
},
{
"style": "List",
"text": "Trading Capability: Partial. With a proper key configuration placing orders is possible. Currently, closing orders is not fully functional, so all types of trading strategies may not be fully functional.",
"updated": 1617935811860
},
{
"style": "List",
"text": "Comments: Raw Data fetching extremely slow due to API restrictions, see config.",
"updated": 1616005813658
},
{
"style": "Title",
"text": "Exchange Configuration"
},
{
"style": "Json",
"text": "{\n \"codeName\": \"coinbasepro\",\n \"API\": [\n {\n \"method\": \"fetch_ohlcv\",\n \"limit\": 300\n }\n ]\n}",
"updated": 1617935879109
},
{
"style": "Title",
"text": "API Key Configuration"
},
{
"style": "Json",
"text": "{\n \"codeName\": \"APIKEY\",\n \"secret\": \"SECRETKEY\",\n \"password\": \"PASSPHRASE\"\n}"
},
{
"style": "Text",
"text": ""
}
]
}
@@ -21,7 +21,13 @@
{
"language": "TR",
"text": "Bu eğitim size Superalgos evrenini tanıtır. Sistemin ana alanlarında size yol gösterir, size temel işlemleri öğretir, bir demo alım satım sisteminin geriye dönük test etme sürecinde size yol gösterir ve hatta ilk Canlı alım satım oturumunuzu ayarlar.",
"updated": 1633120392075
"updated": 1633120392075,
"style": "Definition"
},
{
"language": "NL",
"text": "Deze tutorial is een introductie in het Superalgos-universum. Het leid je door de belangrijkste gebieden van het systeem, leert je de basiswerking, loopt je door het proces van backtesting van een demo Trading System, en helpt je zelfs met je eerste Live Trading Session.",
"updated": 1633851542435
}
]
},
@@ -25,7 +25,13 @@
{
"language": "TR",
"text": "Kullanıcılar, tercih ettiğiniz dili seçebilmeniz için çevirilere katkıda bulunuyor! Bu Topluluk harika!",
"updated": 1633120577362
"updated": 1633120577362,
"style": "Definition"
},
{
"language": "NL",
"text": "Gebruikers voegen vertalingen toe, zodat je jouw voorkeurstaal kan kiezen! Deze Community is geweldig!",
"updated": 1633850957963
}
]
},
@@ -50,7 +56,13 @@
{
"language": "TR",
"text": "Bu nasıl çalışır? Varsayılan dil İngilizce'dir. Başka bir dil seçerseniz ve mevcut sayfa için bir herhangi bir dilde çeviri varsa, onu sayfanın aşağısındaki bayraklara tıklaarak seçtiğiniz dilde görüntülersiniz. Eğer çeviri yoksa,İngilizce olarak görürsünüz1",
"updated": 1633120762865
"updated": 1633120762865,
"style": "Text"
},
{
"language": "NL",
"text": "Dit is hoe het werkt: de standaardtaal is Engels. Als je een andere taal kiest en er is een vertaling voor de huidige pagina, dan krijgt je deze te zien in de gekozen taal, anders zie je de pagina in het Engels!",
"updated": 1633851093585
}
]
},
@@ -74,7 +86,13 @@
{
"language": "TR",
"text": "Sayfayı aşağı kaydırmak için fare tekerleğini kullanın. Dilerseniz tercih ettiğiniz dili değiştirmek için bir bayrağa tıklayın!",
"updated": 1633120795496
"updated": 1633120795496,
"style": "Callout"
},
{
"language": "NL",
"text": "Gebruik je muiswiel om de pagina aan de rechterkant naar beneden te scrollen. Als je het wilt, klik op een vlaggetje om de voorkeurstaal te wijzigen!",
"updated": 1633851203889
}
]
},
@@ -98,7 +116,13 @@
{
"language": "TR",
"text": "Arayüz veya başlıklar değil, yalnızca Dokümanlar ve öğreticiler çevrilebilir!",
"updated": 1633121237275
"updated": 1633121237275,
"style": "Note"
},
{
"language": "NL",
"text": "Alleen de Docs en de tutorials mogen worden vertaald niet de interface en de titels!",
"updated": 1633851259089
}
]
}
@@ -32,6 +32,11 @@
"text": "Je suis un tutoriel interactif, le premier de une serie cree pour vous facilter la connaissance de Superalgo et de vous guider dans ses choix basiques!",
"updated": 1623946542352,
"style": "Definition"
},
{
"language": "NL",
"text": "Ik ben een interactieve tutorial, de eerste in een reeks die ontworpen is om je kennismaking te vergemakkelijken en je alle basisprincipes te leren!",
"updated": 1633850222210
}
],
"updated": 1633159917192
@@ -64,6 +69,11 @@
"text": "Je vais vous aider à démarrer, en vous montrant les outils qui vous aideront à vous déplacer facilement, et vous aider à découvrir toutes les choses que Superalgos vous faciliter.",
"updated": 1623945805888,
"style": "Text"
},
{
"language": "NL",
"text": "Ik help je op weg, laat je de hulpmiddelen zien om je op weg te helpen en help je alle coole dingen te ontdekken die Superalgos voor je kan doen.",
"updated": 1633850415380
}
],
"updated": 1633159949363
@@ -95,6 +105,11 @@
"text": "Les tutoriels sont l'ultime outil d'initiation à Superalgos ! Commencer à utiliser Superalgos d'une autre manière serait une erreur, car aucune autre ressource ne vous permettra d'être opérationnel plus rapidement. Nous vous recommandons de suivre tous les tutoriels avant d'essayer de mettre en œuvre vos propres idées !",
"updated": 1623946050005,
"style": "Callout"
},
{
"language": "NL",
"text": "Tutorials zijn de ultieme Superalgos kennismakingstool! Op een andere manier Superalgos ontdekken is een vergissing, omdat geen enkel ander hulpmiddel je sneller op weg helpt. Je hoort alle tutorials te doen voordat je jouw eigen ideeën probeert te implementeren!",
"updated": 1633850814638
}
],
"updated": 1633159975051
@@ -132,6 +147,11 @@
"text": "Lütfen devam etmek için her zaman NEXT'e tıklayın!",
"updated": 1633121186582,
"style": "Success"
},
{
"language": "NL",
"text": "klik op Next om verder te gaan!",
"updated": 1633850689870
}
]
}
@@ -37,7 +37,13 @@
{
"language": "TR",
"text": "Ön ucu çalıştırırken Chrome'u veya Mac'te Safari'yi kullanın! Başka tarayıcılarda test yapmıyoruz!",
"updated": 1633119819656
"updated": 1633119819656,
"style": "Definition"
},
{
"language": "NL",
"text": "Als je het frontend draait, gebruik dan Chrome, of Safari op de Mac! We testen niet met andere browsers!",
"updated": 1633849729343
}
]
},
@@ -73,7 +79,13 @@
{
"language": "TR",
"text": "Tarayıcıların farklı davrandığı bilinen bir gerçektir ve diğer tarayıcılarda çalışmayan özellikleri biliyoruz. Chrome veya Safari kullanıyorsanız, İleri'yi tıklayın ve devam edin. Değilse, aşağıdakileri yapın:",
"updated": 1633119849958
"updated": 1633119849958,
"style": "Text"
},
{
"language": "NL",
"text": "Het is een feit dat browsers zich verschillend gedragen, en er zijn functies bekend die niet werken op andere browsers. Als u Chrome of Safari gebruikt, klik dan op Volgende en ga verder. Zo niet, doe dan het volgende:",
"updated": 1633854517473
}
]
},
@@ -109,7 +121,13 @@
{
"language": "TR",
"text": "Mevcut URL'yi kopyalayın;",
"updated": 1633119896420
"updated": 1633119896420,
"style": "List"
},
{
"language": "NL",
"text": "kopieer de huidige URL;",
"updated": 1633849856387
}
]
},
@@ -145,7 +163,13 @@
{
"language": "TR",
"text": "Bu tarayıcıyı olduğu gibi kapatın; öğreticiyi kapatmayın...",
"updated": 1633119959684
"updated": 1633119959684,
"style": "List"
},
{
"language": "NL",
"text": "sluit de browser; niet de tutorial afsluiten...",
"updated": 1633849937374
}
]
},
@@ -181,7 +205,13 @@
{
"language": "TR",
"text": "Chrome/Safari'yi açın ve URL'yi yapıştırın; Geri döndüğünüzde bu adımda öğretici açık olmalıdır!",
"updated": 1633119977867
"updated": 1633119977867,
"style": "List"
},
{
"language": "NL",
"text": "open Chrome/Safari en plak de URL; de tutorial hoort te openen op deze stap bij terugkomst!",
"updated": 1633850034853
}
]
},
@@ -216,7 +246,13 @@
{
"language": "TR",
"text": "Çevrimiçi destek sunuyoruz, ancak başka bir tarayıcıyla size yardımcı olamayız!",
"updated": 1633120004286
"updated": 1633120004286,
"style": "Warning"
},
{
"language": "NL",
"text": "We bieden online support, maar kunnen je niet helpen bij het gebruik van een andere brwoser!",
"updated": 1633850083942
}
]
}
@@ -36,7 +36,13 @@
{
"language": "TR",
"text": "Öğreticiler sistem içinde tanımlanmıştır, böylece dilerseniz daha fazlasını oluşturabilirsiniz! Ama bu Tanrısal gücü daha sonra tartışacağız. Önce temellere odaklanalım!",
"updated": 1633121322983
"updated": 1633121322983,
"style": "Definition"
},
{
"language": "NL",
"text": "Tutorials zijn gedefinieerd binnen in het systeem, je mag er meer maken als je wilt! Maar die \"goddelijke macht\" bespreken we later. Laten we ons eerst richten op de basis!",
"updated": 1633760912101
}
]
},
@@ -72,7 +78,13 @@
{
"language": "TR",
"text": "Superalgos doğası gereği görsel bir araçtır. Sistem, simgelerle temsil edilen, birbirine bağlı düğümlerin hiyerarşik yapılarındaki bilgileri temsil eder. Sağınızda gördüğünüz şey, bu hiyerarşilerden biridir - özellikle bir Öğretici hiyerarşisi. Bu durumda, \"öğretici\" düğüm türüdür ve \"Superalgos'a Hoş Geldiniz!\" düğümün adıdır.",
"updated": 1633121451310
"updated": 1633121451310,
"style": "Text"
},
{
"language": "NL",
"text": "Superalgos is een visueel hulpmiddel. Het systeem geeft informatie weer in hiërarchische structuren van onderling verbonden knooppunten, afgebeeld met pictogrammen. Wat je rechts ziet, is een van deze hiërarchieën - in het bijzonder een Tutorial hiërarchie. In dit geval is \"tutorial\" het type knooppunt en \"Welcome to Superalgos!\" is de naam van het knooppunt.",
"updated": 1633761030337
}
],
"updated": 1616410534255
@@ -111,6 +123,11 @@
"text": "Passez le pointeur de votre souris sur le nœud \"Tutorial\", et voyez ce qui se passe ! Ouh... C'est cool, non ? Ça fait beaucoup de boutons !",
"updated": 1623951096410,
"style": "Callout"
},
{
"language": "NL",
"text": "Beweeg je muis over het Tutorial knooppunt en kijk wat er gebeurt! Wow! Cool toch? Dat zijn een heleboel knoppen!",
"updated": 1633761113014
}
]
}
@@ -36,7 +36,13 @@
{
"language": "TR",
"text": "Her düğümde bir menü bulunur. Sol altta üzerinde \"+\" simgesinin bulunduğu buton, mevcut düğümü genişletir ya da daraltır. Böylece düğümün altındaki öğelere ulaşabilirsiniz.",
"updated": 1633267521331
"updated": 1633267521331,
"style": "Definition"
},
{
"language": "NL",
"text": "Elk knooppunt heeft een menu. De knop linksonder klapt de structuur van de knooppunten onder het huidige knooppunt uit en in.",
"updated": 1633852831708
}
]
},
@@ -72,7 +78,13 @@
{
"language": "TR",
"text": "Devam edin ve genişlet düğmesine tıklayın!",
"updated": 1633267545525
"updated": 1633267545525,
"style": "Callout"
},
{
"language": "NL",
"text": "Klik maar op de \"expand\" knop en vouw het knooppunt uit!",
"updated": 1633852949878
}
]
},
@@ -107,7 +119,13 @@
{
"language": "TR",
"text": "Öğretici (Tutorial) düğümün birkaç çocuğu vardır ve bunların birkaç çocuğu daha vardır.",
"updated": 1633267652469
"updated": 1633267652469,
"style": "Text"
},
{
"language": "NL",
"text": "Het Tutorial knooppunt heeft meerdere sub knooppunten, en deze hebben weer meerdere knooppunten. Daarom is het een hiërarchie!",
"updated": 1633853126300
}
]
},
@@ -142,7 +160,13 @@
{
"language": "TR",
"text": "Bilginin yapılandırılmış görsel temsilleri, Superalgos'un esnek ve ölçeklenebilir ticaret operasyonlarının arkasındaki karmaşıklığı nasıl yönettiğinin merkezinde yer alır.",
"updated": 1633267689476
"updated": 1633267689476,
"style": "Note"
},
{
"language": "NL",
"text": "Gestructureerde visuele weergave van informatie vormen de kern van hoe Superalgos de complexiteit achter flexibele en schaalbare handelingen beheert.",
"updated": 1633853202849
}
]
}
@@ -36,7 +36,13 @@
{
"language": "TR",
"text": "Menünün geri kalanını göstermeden önce, başka bir hiyerarşiye bir göz atalım: \"Ağ.\"(Lan Network)",
"updated": 1633268337360
"updated": 1633268337360,
"style": "Definition"
},
{
"language": "NL",
"text": "Voor ik je de rest van het menu laat zien, laten we eerst een andere hiërarchie bekijken: het Netwerk.",
"updated": 1633853332041
}
]
},
@@ -72,7 +78,13 @@
{
"language": "TR",
"text": "Ağ hiyerarşisi, sistemin kontrol odasıdır.Burası Veri Görevlerinizi ( Data Task ), Ticaret Görevlerini Test Etme ( Testing Trading Tasks ) ve Ticaret Görevlerinizi ( Production Trading Tasks ) kontrol ettiğiniz yerdir.",
"updated": 1633268830564
"updated": 1633268830564,
"style": "Text"
},
{
"language": "NL",
"text": "De Netwerk hiërarchie is de controlekamer van het systeem. Dit is waar je jouw Data Tasks, Test Trading Tasks en Production Trading Tasks beheert.",
"updated": 1633853559028
}
]
},
@@ -107,7 +119,13 @@
{
"language": "TR",
"text": "Düğümü genişletin ve içeriye bir göz atın!",
"updated": 1633268461684
"updated": 1633268461684,
"style": "Callout"
},
{
"language": "NL",
"text": "Vouw de hiërarchie uit en laten we eens binnenin kijken!",
"updated": 1633853650994
}
]
},
@@ -143,7 +161,13 @@
{
"language": "TR",
"text": "Daha önce bahsettiğim düğümleri görüyor musunuz? Güzel! İlk veri madenciliği operasyonunuzu başlatmak için buradayız.",
"updated": 1633268493855
"updated": 1633268493855,
"style": "Text"
},
{
"language": "NL",
"text": "Zie je de eerder genoemde (sub)knooppunten? Cool! Wij zijn hier om uw allereerste datamining operatie op te starten.",
"updated": 1633853738041
}
]
},
@@ -178,7 +202,13 @@
{
"language": "TR",
"text": "Ancak başlamadan önce size kısa bir sorum var: İstemciye uzaktan erişiyor musunuz?",
"updated": 1633268516400
"updated": 1633268516400,
"style": "Note"
},
{
"language": "NL",
"text": "Voor we beginnen, heb ik de volgende vraag voor je: benader je de Client op afstand?",
"updated": 1633853800893
}
]
}
@@ -32,6 +32,11 @@
"text": "Superalgos permet d'exécuter le Client sur une machine et d'y accéder via le navigateur depuis une autre machine du réseau.",
"updated": 1623952405992,
"style": "Definition"
},
{
"language": "NL",
"text": "De Superalgos Client kan op afstand draaien en benaderd worden via de browser op een ander apparaat in het netwerk.",
"updated": 1633853950991
}
],
"updated": 1616410688496
@@ -64,6 +69,11 @@
"text": "De nombreux utilisateurs choisissent d'exécuter le Client dans le nuage, sur des machines à carte unique comme le Raspberry Pi, ou sur un PC dédié qu'ils peuvent laisser allumé en permanence lorsqu'ils négocient en direct. Le nœud de réseau My Computer représente la machine sur laquelle le Client est exécuté.",
"updated": 1623952548227,
"style": "Text"
},
{
"language": "NL",
"text": "Veel geruikers kiezen ervoor om de Client in de cloud te draaien op een single-board apparaat zoals de Raspberry Pi, of op een toegewijde PC die altijd aanstaat voor Live Trading. De \"My Computer\" Network Node stelt het apparaat voor waar de Client op draait.",
"updated": 1633854215256
}
]
},
@@ -89,6 +99,11 @@
"text": "Al momento, Superalgos non implementa alcuna forma di sicurezza. Dovresti usarlo soltanto in un contesto sicuro, come una LAN riservata. Se scegli di eseguire il Client nel cloud, devi implementare da te i meccanismi di sicurezza.",
"updated": 1614718058273,
"style": "Warning"
},
{
"language": "NL",
"text": "Op dit moment implementeert Superalgos nog geen enkele vorm van beveiliging. Gebruik het systeem alleen in een \"restricted Local Area Network\". Als je ervoor kiest om de client in de cloud te draaien, moet je jouw eigen beveiliging implementeren!",
"updated": 1633854469540
}
]
}
@@ -101,7 +101,12 @@ function newFoundationsActionSwitch() {
break
case 'Add UI Object':
{
UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(action.node, action.relatedNodeType, action.rootNodes, action.project)
UI.projects.foundations.functionLibraries.uiObjectsFromNodes.addUIObject(
action.node,
action.relatedNodeType,
action.rootNodes,
action.relatedNodeProject
)
}
break
case 'Add Missing Children':
@@ -609,35 +614,15 @@ function newFoundationsActionSwitch() {
UI.projects.foundations.spaces.floatingSpace.uiObjectConstructor.createUiObject(true, action.node.payload)
}
break
case 'Send Telegram Test Message':
{
UI.projects.foundations.functionLibraries.socialBotsFunctions.sendTelegramTestMessage(action.node, action.callBackFunction)
}
break
case 'Send Discord Test Message':
{
UI.projects.foundations.functionLibraries.socialBotsFunctions.sendDiscordTestMessage(action.node, action.callBackFunction)
}
break
case 'Send Slack Test Message':
{
UI.projects.foundations.functionLibraries.socialBotsFunctions.sendSlackTestMessage(action.node, action.callBackFunction)
}
break
case 'Send Twitter Test Message':
{
UI.projects.foundations.functionLibraries.socialBotsFunctions.sendTwitterTestMessage(action.node, action.callBackFunction)
}
break
case 'Save node to be moved':
{
UI.projects.foundations.spaces.floatingSpace.saveFloatingObjectToBeMoved()
}
{
UI.projects.foundations.spaces.floatingSpace.saveFloatingObjectToBeMoved()
}
break
case 'Snap saved node to position':
{
UI.projects.foundations.spaces.floatingSpace.moveFloatingObject(action.node.payload.position)
}
{
UI.projects.foundations.spaces.floatingSpace.moveFloatingObject(action.node.payload.position)
}
break
}
}
@@ -340,6 +340,8 @@ function newFoundationsFunctionLibraryChartingSpaceFunctions() {
let projectDefinition = PROJECTS_SCHEMA[k]
let project = projectDefinition.name
if (projectDefinition.products === undefined) { continue }
for (let j = 0; j < rootNodes.length; j++) {
let rootNode = rootNodes[j]
if (rootNode.type === project + ' Project') {
@@ -233,6 +233,9 @@ function newFoundationsFunctionLibraryDataStorageFunctions() {
let projectDefinition = PROJECTS_SCHEMA[k]
let project = projectDefinition.name
if (projectDefinition.products === undefined) { continue }
if (projectDefinition.products.includes(newNodeType.replace('Project ', '')) === false) { continue }
for (let j = 0; j < rootNodes.length; j++) {
let rootNode = rootNodes[j]
if (rootNode.type === project + ' Project') {
@@ -20,6 +20,7 @@ function newFoundationsFunctionLibraryReferenceAttachDetach() {
// Store the path to the reference parent to make restoring it possible if the reference parent is updated and given a new id
function storeAttachNodePath(node, attachToNode) {
if (node === undefined) { return }
if (node.payload === undefined) { return }
let attachNodePath = UI.projects.foundations.utilities.hierarchy.getNodeNameTypePath(attachToNode)
// Remove unused node id, and project tag from stored path
@@ -33,11 +34,12 @@ function newFoundationsFunctionLibraryReferenceAttachDetach() {
// Clear the path to reference parent when the reference is cleared
function cleanAttachNodePath(node) {
if (node.payload !== undefined) {
node.payload.referenceParentCombinedNodePath = undefined
if (node.savedPayload !== undefined) {
node.savedPayload.referenceParentCombinedNodePath = undefined
}
if (node === undefined) { return }
if (node.payload === undefined) { return }
node.payload.referenceParentCombinedNodePath = undefined
if (node.savedPayload !== undefined) {
node.savedPayload.referenceParentCombinedNodePath = undefined
}
}
@@ -601,7 +601,7 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() {
let schemaDocument = getSchemaDocument(object, project)
if (schemaDocument === undefined) {
console.log('Cannot addUIOBject of ' + type + ' because that type it is not defined at the APP_SCHEMA.')
console.log('Cannot addUIOBject of type "' + type + '" and project "' + project + '" because that type it is not defined at the APP_SCHEMA.')
return
}
@@ -629,7 +629,7 @@ function newFoundationsFunctionLibraryUiObjectsFromNodes() {
parentSchemaDocument = getSchemaDocument(parentNode, parentNode.project)
if (parentSchemaDocument === undefined) {
console.log('Cannot addUIOBject from parent of ' + type + ' because that type it is not defined at the APP_SCHEMA.')
console.log('Cannot addUIOBject from parent of type "' + type + '" and project "' + parentNode.project + '" because that type it is not defined at the APP_SCHEMA.')
return
}
checkChainToSelfTypeCollection()
@@ -112,7 +112,7 @@ function newCircularMenuItem() {
iconPhysics()
if (thisObject.icon === undefined) {
console.log('[ERROR] newCircularMenuItem -> initialize -> err = Icon not found, Action: "' + thisObject.action + '", relatedUiObject: "' + thisObject.relatedUiObject +'", label: "' + thisObject.label + '"')
console.log('[ERROR] newCircularMenuItem -> initialize -> err = Icon not found, Action: "' + thisObject.action + '", relatedUiObject: "' + thisObject.relatedUiObject + '", label: "' + thisObject.label + '"')
}
selfMouseOverEventSubscriptionId = thisObject.container.eventHandler.listenToEvent('onMouseOver', onMouseOver)
@@ -379,7 +379,21 @@ function newCircularMenuItem() {
}
/* Execute the action and wait for callbacks to update our statuus. */
thisObject.actionFunction({ node: thisObject.payload.node, name: thisObject.action, project: thisObject.actionProject, relatedNodeType: thisObject.relatedUiObject, callBackFunction: onPrimaryCallBack })
let relatedNodeProject = thisObject.actionProject
if (thisObject.relatedUiObjectProject !== undefined) {
relatedNodeProject = thisObject.relatedUiObjectProject
}
thisObject.actionFunction(
{
node: thisObject.payload.node,
name: thisObject.action,
project: thisObject.actionProject,
relatedNodeType: thisObject.relatedUiObject,
relatedNodeProject: relatedNodeProject,
callBackFunction: onPrimaryCallBack
}
)
return
}
if (temporaryStatus === STATUS_PRIMARY_WORK_DONE && thisObject.secondaryAction !== undefined) {
@@ -502,7 +516,7 @@ function newCircularMenuItem() {
if (thisObject.icon === undefined) {
thisObject.icon = UI.projects.foundations.spaces.designSpace.getIconByProjectAndName('Foundations', 'missing-image')
}
if (thisObject.icon !== undefined) {
if (thisObject.icon.canDrawIcon === true && thisObject.currentRadius > 1 && thisObject.isDeployed === true) {
browserCanvasContext.drawImage(thisObject.icon, menuPosition.x - iconSize, menuPosition.y - iconSize, iconSize * 2, iconSize * 2)
@@ -31,6 +31,7 @@ function newFloatingObject() {
collapsedManually: false,
typeStrokeStyle: undefined,
nameStrokeStyle: undefined,
isVisibleFunction: isVisibleFunction,
forceFocus: forceFocus,
removeForceFocus: removeForceFocus,
setFocus: setFocus,
@@ -74,6 +75,7 @@ function newFloatingObject() {
thisObject.container.isClickeable = true
thisObject.container.isDraggeable = true
thisObject.container.detectMouseOver = true
thisObject.container.isVisibleFunction = thisObject.isVisibleFunction
thisObject.container.frame.radius = 0
thisObject.container.frame.position.x = 0
thisObject.container.frame.position.y = 0
@@ -826,4 +828,15 @@ function newFloatingObject() {
function updateRadius() {
}
function isVisibleFunction(point){
if(point.x <= UI.projects.foundations.spaces.floatingSpace.container.frame.width + (browserCanvas.width / 2) && point.x >= 0
&& point.y <= UI.projects.foundations.spaces.floatingSpace.container.frame.height + (browserCanvas.height / 2) && point.y >= 0) {
return true
}
else{
return false
}
}
}
@@ -42,7 +42,8 @@ function newFoundationsFloatingSpace() {
finalize: finalize,
saveFloatingObjectToBeMoved: saveFloatingObjectToBeMoved,
moveSavedFloatingObjectToMouse: moveSavedFloatingObjectToMouse,
moveFloatingObject: moveFloatingObject
moveFloatingObject: moveFloatingObject,
rescueFloatingObjectToMouse: rescueFloatingObjectToMouse
}
thisObject.container = newContainer()
@@ -112,7 +113,8 @@ function newFoundationsFloatingSpace() {
saveWorkspace: "S",
adjustAspectRatio: "A",
saveFloatingObjectToBeMoved: "Z",
moveSavedFloatingObjectToMouse: "X"
moveSavedFloatingObjectToMouse: "X",
rescueFloatingObjectToMouse: "K"
}
}
@@ -576,7 +578,9 @@ function newFoundationsFloatingSpace() {
if (configSettings.shortcuts.moveSavedFloatingObjectToMouse !== undefined) {
thisObject.settings.shortcuts.moveSavedFloatingObjectToMouse = configSettings.shortcuts.moveSavedFloatingObjectToMouse
}
if (configSettings.shortcuts.rescueFloatingObjectToMouse !== undefined) {
thisObject.settings.shortcuts.rescueFloatingObjectToMouse = configSettings.shortcuts.rescueFloatingObjectToMouse
}
}
}
@@ -636,14 +640,21 @@ function newFoundationsFloatingSpace() {
}
function canvasPositionToFrame(Position){
Position.y = Position.y + CURRENT_TOP_MARGIN
let positionConv
positionConv = thisObject.container.frame.frameThisPoint(Position)
positionConv.x = (2 * Position.x) - positionConv.x
positionConv.y = (2 * Position.y) - positionConv.y
return positionConv
}
function moveSavedFloatingObjectToMouse(mousePosition) {
mousePosition.y = mousePosition.y + CURRENT_TOP_MARGIN
let positionConv
positionConv = thisObject.container.frame.frameThisPoint(mousePosition)
positionConv.x = (2 * mousePosition.x) - positionConv.x
positionConv.y = (2 * mousePosition.y) - positionConv.y
positionConv = canvasPositionToFrame(mousePosition)
moveFloatingObject(positionConv)
}
@@ -677,4 +688,30 @@ function newFoundationsFloatingSpace() {
}
}
function rescueFloatingObjectToMouse(mousePosition){
let positionConv
positionConv = canvasPositionToFrame(mousePosition)
rescueFloatingObject(positionConv)
}
function rescueFloatingObject(position){
UI.projects.foundations.spaces.cockpitSpace.setStatus('Attempting to rescue lost nodes to your mouse', 100, UI.projects.foundations.spaces.cockpitSpace.statusTypes.ALL_GOOD)
for (let i = 0; i < UI.projects.foundations.spaces.designSpace.workspace.workspaceNode.rootNodes.length; i++) {
let map = new Map()
map = UI.projects.foundations.utilities.hierarchy.getHiriarchyMap(UI.projects.foundations.spaces.designSpace.workspace.workspaceNode.rootNodes[i])
let iterator1 = map.values();
for (let k = 0; k < map.size; k++) {
let floatingObject1 = iterator1.next().value.payload.floatingObject
if(!floatingObject1.isVisibleFunction(floatingObject1.container.frame.position)){
thisObject.floatingObjetSaved = floatingObject1
moveFloatingObject(position)
}
}
}
thisObject.floatingObjetSaved = undefined
}
}
@@ -7,7 +7,7 @@
}
TS.projects.foundations.globals.processVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).SOCIAL_BOTS_MODULE =
TS.projects.foundations.botModules.socialBots.newFoundationsBotModulesSocialBots(processIndex)
TS.projects.socialBots.botModules.socialBots.newSocialBotsBotModulesSocialBots(processIndex)
return thisObject;
+77 -49
View File
@@ -331,11 +331,6 @@
"name": "Workspace Functions",
"propertyName": "workspaceFunctions",
"functionName": "newFoundationsFunctionLibraryWorkspaceFunctions"
},
{
"name": "Social Bots Functions",
"propertyName": "socialBotsFunctions",
"functionName": "newFoundationsFunctionLibrarySocialBotsFunctions"
}
],
"utilities": [
@@ -739,50 +734,7 @@
"fileName": "ProcessOutput.js"
}
],
"botModules": [
{
"name": "Announcements",
"propertyName": "announcements",
"functionName": "newFoundationsBotModulesAnnouncements",
"fileName": "Announcements.js",
"folderName": "Trading-Bot/Announcements"
},
{
"name": "Social Bots",
"propertyName": "socialBots",
"functionName": "newFoundationsBotModulesSocialBots",
"fileName": "SocialBots.js",
"folderName": "Trading-Bot/Announcements"
},
{
"name": "Telegram Bot",
"propertyName": "telegramBot",
"functionName": "newFoundationsBotModulesTelegramBot",
"fileName": "TelegramBot.js",
"folderName": "Trading-Bot/Announcements"
},
{
"name": "Discord Bot",
"propertyName": "discordBot",
"functionName": "newFoundationsBotModulesDiscordBot",
"fileName": "DiscordBot.js",
"folderName": "Trading-Bot/Announcements"
},
{
"name": "Slack Bot",
"propertyName": "slackBot",
"functionName": "newFoundationsBotModulesSlackBot",
"fileName": "SlackBot.js",
"folderName": "Trading-Bot/Announcements"
},
{
"name": "Twitter Bot",
"propertyName": "twitterBot",
"functionName": "newFoundationsBotModulesTwitterBot",
"fileName": "TwitterBot.js",
"folderName": "Trading-Bot/Announcements"
}
]
"botModules": []
},
"PL": {
"utilities": [
@@ -839,6 +791,11 @@
"plugins": [
"Tutorials",
"API Maps"
],
"products": [
"Data Products",
"Trading Products",
"Learning Products"
]
},
{
@@ -1594,5 +1551,76 @@
}
]
}
},
{
"name": "Social-Bots",
"propertyName": "socialBots",
"UI": {
"functionLibraries": [
{
"name": "Social Bots Functions",
"propertyName": "socialBotsFunctions",
"functionName": "newSocialBotsFunctionLibrarySocialBotsFunctions"
}
],
"utilities": []
},
"TS": {
"botModules": [
{
"name": "Announcements",
"propertyName": "announcements",
"functionName": "newSocialBotsBotModulesAnnouncements",
"fileName": "Announcements.js",
"folderName": ""
},
{
"name": "Social Bots",
"propertyName": "socialBots",
"functionName": "newSocialBotsBotModulesSocialBots",
"fileName": "SocialBots.js",
"folderName": ""
},
{
"name": "Telegram Bot",
"propertyName": "telegramBot",
"functionName": "newSocialBotsBotModulesTelegramBot",
"fileName": "TelegramBot.js",
"folderName": ""
},
{
"name": "Discord Bot",
"propertyName": "discordBot",
"functionName": "newSocialBotsBotModulesDiscordBot",
"fileName": "DiscordBot.js",
"folderName": ""
},
{
"name": "Slack Bot",
"propertyName": "slackBot",
"functionName": "newSocialBotsBotModulesSlackBot",
"fileName": "SlackBot.js",
"folderName": ""
},
{
"name": "Twitter Bot",
"propertyName": "twitterBot",
"functionName": "newSocialBotsBotModulesTwitterBot",
"fileName": "TwitterBot.js",
"folderName": ""
}
]
}
},
{
"name": "Visual-Scripting",
"propertyName": "visualScripting",
"UI": {
"functionLibraries": [],
"utilities": []
},
"TS": {
"botModules": []
}
}
]
Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

@@ -9,7 +9,8 @@
"actionFunction": "uiObject.codeEditor.activate",
"label": "Configure",
"iconPathOn": "configuration",
"iconPathOff": "configuration"
"iconPathOff": "configuration",
"actionProject": "Foundations"
},
{
"action": "Delete UI Object",
@@ -18,7 +19,8 @@
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"actionProject": "Foundations"
}
],
"initialValues": {
@@ -7,7 +7,8 @@
"iconPathOn": "javascript-code",
"iconPathOff": "javascript-code",
"dontShowAtFullscreen": true,
"actionFunction": "uiObject.formulaEditor.activate"
"actionFunction": "uiObject.formulaEditor.activate",
"actionProject": "Foundations"
},
{
"action": "Delete UI Object",
@@ -16,7 +17,8 @@
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"actionProject": "Foundations"
}
],
"addLeftIcons": true,
@@ -9,7 +9,8 @@
"actionFunction": "uiObject.configEditor.activate",
"label": "Configure",
"iconPathOn": "configuration",
"iconPathOff": "configuration"
"iconPathOff": "configuration",
"actionProject": "Foundations"
},
{
"action": "Add UI Object",
@@ -17,7 +18,9 @@
"propertyToCheckFor": "announcementFormula",
"label": "Add Announcement Formula",
"relatedUiObject": "Announcement Formula",
"actionFunction": "payload.executeAction"
"relatedUiObjectProject": "Social-Bots",
"actionFunction": "payload.executeAction",
"actionProject": "Foundations"
},
{
"action": "Add UI Object",
@@ -25,7 +28,9 @@
"propertyToCheckFor": "announcementCondition",
"label": "Add Announcement Condition",
"relatedUiObject": "Announcement Condition",
"actionFunction": "payload.executeAction"
"relatedUiObjectProject": "Social-Bots",
"actionFunction": "payload.executeAction",
"actionProject": "Foundations"
},
{
"action": "Delete UI Object",
@@ -34,7 +39,8 @@
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"actionProject": "Foundations"
}
],
"initialValues": {
@@ -50,13 +56,15 @@
"name": "announcementFormula",
"type": "node",
"childType": "Announcement Formula",
"autoAdd": true
"autoAdd": true,
"project": "Social-Bots"
},
{
"name": "announcementCondition",
"type": "node",
"childType": "Announcement Condition",
"autoAdd": true
"autoAdd": true,
"project": "Social-Bots"
}
],
"propertyNameAtParent": "announcements"
@@ -9,14 +9,16 @@
"actionFunction": "uiObject.configEditor.activate",
"label": "Configure",
"iconPathOn": "configuration",
"iconPathOff": "configuration"
"iconPathOff": "configuration",
"actionProject": "Foundations"
},
{
"action": "Send Discord Test Message",
"label": "Send Discord Test Message",
"iconPathOn": "test-entity",
"iconPathOff": "test-entity",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"actionProject": "SocialBots"
},
{
"action": "Delete UI Object",
@@ -25,7 +27,8 @@
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"actionProject": "Foundations"
}
],
"initialValues": {
@@ -9,14 +9,16 @@
"actionFunction": "uiObject.configEditor.activate",
"label": "Configure",
"iconPathOn": "configuration",
"iconPathOff": "configuration"
"iconPathOff": "configuration",
"actionProject": "Foundations"
},
{
"action": "Send Slack Test Message",
"label": "Send Slack Test Message",
"iconPathOn": "test-entity",
"iconPathOff": "test-entity",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"actionProject": "SocialBots"
},
{
"action": "Delete UI Object",
@@ -25,7 +27,8 @@
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"actionProject": "Foundations"
}
],
"initialValues": {
@@ -9,7 +9,8 @@
"actionFunction": "uiObject.configEditor.activate",
"label": "Configure",
"iconPathOn": "configuration",
"iconPathOff": "configuration"
"iconPathOff": "configuration",
"actionProject": "Foundations"
},
{
"action": "Add UI Object",
@@ -17,7 +18,8 @@
"propertyToCheckFor": "formula",
"label": "Add Formula",
"relatedUiObject": "Formula",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"actionProject": "Foundations"
},
{
"action": "Delete UI Object",
@@ -26,7 +28,8 @@
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"actionProject": "Foundations"
}
],
"initialValues": {
@@ -42,7 +45,8 @@
"name": "formula",
"type": "node",
"childType": "Formula",
"autoAdd": true
"autoAdd": true,
"project": "Foundations"
}
],
"propertyNameAtParent": "socialBotCommand"
@@ -5,25 +5,33 @@
"action": "Add UI Object",
"label": "Add Telegram Bot",
"relatedUiObject": "Telegram Bot",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"actionProject": "Foundations",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Add UI Object",
"label": "Add Discord Bot",
"relatedUiObject": "Discord Bot",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"actionProject": "Foundations",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Add UI Object",
"label": "Add Slack Bot",
"relatedUiObject": "Slack Bot",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"actionProject": "Foundations",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Add UI Object",
"label": "Add Twitter Bot",
"relatedUiObject": "Twitter Bot",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"actionProject": "Foundations",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Delete UI Object",
@@ -32,7 +40,8 @@
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"actionProject": "Foundations"
}
],
"addLeftIcons": true,
@@ -45,26 +54,30 @@
"name": "telegramBots",
"type": "array",
"childType": "Telegram Bot",
"autoAdd": true
"autoAdd": true,
"project": "Social-Bots"
},
{
"name": "discordBots",
"type": "array",
"childType": "Discord Bot",
"autoAdd": true
"autoAdd": true,
"project": "Social-Bots"
},
{
"name": "slackBots",
"type": "array",
"childType": "Slack Bot",
"autoAdd": true
"autoAdd": true,
"project": "Social-Bots"
},
{
"name": "twitterBots",
"type": "array",
"childType": "Twitter Bot",
"autoAdd": true
"autoAdd": true,
"project": "Social-Bots"
}
],
"propertyNameAtParent": "socialBots"
}
}
@@ -9,20 +9,24 @@
"actionFunction": "uiObject.configEditor.activate",
"label": "Configure",
"iconPathOn": "configuration",
"iconPathOff": "configuration"
"iconPathOff": "configuration",
"actionProject": "Foundations"
},
{
"action": "Add UI Object",
"label": "Add Social Bot Command",
"relatedUiObject": "Social Bot Command",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"actionProject": "Foundations",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Send Telegram Test Message",
"label": "Send Telegram Test Message",
"iconPathOn": "test-entity",
"iconPathOff": "test-entity",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"actionProject": "SocialBots"
},
{
"action": "Delete UI Object",
@@ -31,7 +35,8 @@
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity",
"actionFunction": "payload.executeAction"
"actionFunction": "payload.executeAction",
"actionProject": "Foundations"
}
],
"initialValues": {
@@ -47,7 +52,8 @@
"name": "socialBotCommand",
"type": "array",
"childType": "Social Bot Command",
"autoAdd": false
"autoAdd": false,
"project": "Social-Bots"
}
],
"propertyNameAtParent": "telegramBots"
@@ -0,0 +1,60 @@
{
"type": "Twitter Bot",
"editors": {
"config": true
},
"menuItems": [
{
"action": "Configure",
"actionFunction": "uiObject.configEditor.activate",
"label": "Configure",
"iconPathOn": "configuration",
"iconPathOff": "configuration",
"actionProject": "Foundations"
},
{
"action": "Add UI Object",
"label": "Add Social Bot Command",
"relatedUiObject": "Social Bot Command",
"actionFunction": "payload.executeAction",
"actionProject": "Foundations",
"relatedUiObjectProject": "Social-Bots"
},
{
"action": "Send Twitter Test Message",
"label": "Send Twitter Test Message",
"iconPathOn": "test-entity",
"iconPathOff": "test-entity",
"actionFunction": "payload.executeAction",
"actionProject": "SocialBots"
},
{
"action": "Delete UI Object",
"askConfirmation": true,
"confirmationLabel": "Confirm to Delete",
"label": "Delete",
"iconPathOn": "delete-entity",
"iconPathOff": "delete-entity",
"actionFunction": "payload.executeAction",
"actionProject": "Foundations"
}
],
"initialValues": {
"config": "{ \n\"botToken\": \"Paste the bot token obtained from Twitter \",\n}"
},
"addLeftIcons": true,
"level": 3,
"attachingRules": {
"compatibleTypes": "->Social Bots->"
},
"childrenNodesProperties": [
{
"name": "socialBotCommand",
"type": "array",
"childType": "Social Bot Command",
"autoAdd": false,
"project": "Social-Bots"
}
],
"propertyNameAtParent": "twitterBots"
}
@@ -1,4 +1,4 @@
exports.newFoundationsBotModulesAnnouncements = function (processIndex) {
exports.newSocialBotsBotModulesAnnouncements = function (processIndex) {
const MODULE_NAME = 'Announcements'
@@ -1,4 +1,4 @@
exports.newFoundationsBotModulesDiscordBot = function (processIndex) {
exports.newSocialBotsBotModulesDiscordBot = function (processIndex) {
const MODULE_NAME = 'Discord Bot'
@@ -1,4 +1,4 @@
exports.newFoundationsBotModulesSlackBot = function (processIndex) {
exports.newSocialBotsBotModulesSlackBot = function (processIndex) {
const MODULE_NAME = 'Slack Bot'
@@ -1,4 +1,4 @@
exports.newFoundationsBotModulesSocialBots = function (processIndex) {
exports.newSocialBotsBotModulesSocialBots = function (processIndex) {
const MODULE_NAME = 'Social Bots'
@@ -19,16 +19,16 @@ exports.newFoundationsBotModulesSocialBots = function (processIndex) {
let config = socialBot.config
let commands = socialBot.socialBotCommand
if (socialBot.type === "Telegram Bot") {
socialBot.botInstance = TS.projects.foundations.botModules.telegramBot.newFoundationsBotModulesTelegramBot(processIndex)
socialBot.botInstance = TS.projects.socialBots.botModules.telegramBot.newSocialBotsBotModulesTelegramBot(processIndex)
socialBot.botInstance.initialize(config, commands)
} else if (socialBot.type === "Discord Bot") {
socialBot.botInstance = TS.projects.foundations.botModules.discordBot.newFoundationsBotModulesDiscordBot(processIndex)
socialBot.botInstance = TS.projects.socialBots.botModules.discordBot.newSocialBotsBotModulesDiscordBot(processIndex)
socialBot.botInstance.initialize(config)
} else if (socialBot.type === "Slack Bot") {
socialBot.botInstance = TS.projects.foundations.botModules.slackBot.newFoundationsBotModulesSlackBot(processIndex)
socialBot.botInstance = TS.projects.socialBots.botModules.slackBot.newSocialBotsBotModulesSlackBot(processIndex)
socialBot.botInstance.initialize(config)
} else if (socialBot.type === "Twitter Bot") {
socialBot.botInstance = TS.projects.foundations.botModules.twitterBot.newFoundationsBotModulesTwitterBot(processIndex)
socialBot.botInstance = TS.projects.socialBots.botModules.slackBot.newSocialBotsBotModulesTwitterBot(processIndex)
socialBot.botInstance.initialize(config)
}
}
@@ -44,8 +44,8 @@ exports.newFoundationsBotModulesSocialBots = function (processIndex) {
try {
if (socialBot.type === "Telegram Bot") {
socialBot.botInstance.telegramAPI.sendMessage(socialBot.botInstance.chatId, text).catch(err => TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[WARN] initialize -> initializeSocialBots -> announce -> Telegram API error -> err = " + err))
} else if (socialBot.type === "Discord Bot" || socialBot.type === "Slack Bot" || socialBot.type === "Twitter Bot" ) {
socialBot.botInstance.sendMessage(text).catch(err => TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[WARN] initialize -> initializeSocialBots -> announce -> " + socialBot.type + " error -> err = " + err))
} else if (socialBot.type === "Discord Bot" || socialBot.type === "Slack Bot") {
socialBot.botInstance.sendMessage(text).catch(err => TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[WARN] initialize -> initializeSocialBots -> announce -> Discord Bot error -> err = " + err))
}
} catch (err) {
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, "[WARN] initialize -> announce -> err = " + err.stack);
@@ -67,7 +67,7 @@ exports.newFoundationsBotModulesSocialBots = function (processIndex) {
if (TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots[prop] !== undefined) {
for (let i = 0; i < TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots[prop].length; i++) {
let socialBot = TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots[prop][i]
if (socialBot.type === "Telegram Bot" || socialBot.type === "Discord Bot" || socialBot.type === "Slack Bot" || socialBot.type === "Twitter Bot") {
if (socialBot.type === "Telegram Bot" || socialBot.type === "Discord Bot" || socialBot.type === "Slack Bot") {
socialBot.botInstance.finalize()
}
}
@@ -83,7 +83,7 @@ exports.newFoundationsBotModulesSocialBots = function (processIndex) {
if (TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots[prop] !== undefined) {
for (let i = 0; i < TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots[prop].length; i++) {
let socialBot = TS.projects.foundations.globals.processConstants.CONSTANTS_BY_PROCESS_INDEX_MAP.get(processIndex).SESSION_NODE.socialBots[prop][i]
if (socialBot.type === "Telegram Bot" || socialBot.type === "Discord Bot" || socialBot.type === "Slack Bot" || socialBot.type === "Twitter Bot") {
if (socialBot.type === "Telegram Bot" || socialBot.type === "Discord Bot" || socialBot.type === "Slack Bot") {
socialBot.botInstance.sendMessage(message)
}
}
@@ -1,4 +1,4 @@
exports.newFoundationsBotModulesTelegramBot = function (processIndex) {
exports.newSocialBotsBotModulesTelegramBot = function (processIndex) {
const MODULE_NAME = 'Telegram Bot'
@@ -1,4 +1,4 @@
exports.newFoundationsBotModulesTwitterBot = function (processIndex) {
exports.newSocialBotsBotModulesTwitterBot = function (processIndex) {
const MODULE_NAME = 'Twitter Bot'
@@ -94,4 +94,4 @@ exports.newFoundationsBotModulesTwitterBot = function (processIndex) {
function logError(message) {
TS.projects.foundations.globals.loggerVariables.VARIABLES_BY_PROCESS_INDEX_MAP.get(processIndex).BOT_MAIN_LOOP_LOGGER_MODULE_OBJECT.write(MODULE_NAME, '[ERROR] ' + message)
}
}
}
@@ -0,0 +1,43 @@
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
case 'Send Discord Test Message':
{
UI.projects.socialBots.functionLibraries.socialBotsFunctions.sendDiscordTestMessage(action.node, action.callBackFunction)
}
break
case 'Send Slack Test Message':
{
UI.projects.socialBots.functionLibraries.socialBotsFunctions.sendSlackTestMessage(action.node, action.callBackFunction)
}
break
case 'Send Twitter Test Message':
{
UI.projects.socialBots.functionLibraries.socialBotsFunctions.sendTwitterTestMessage(action.node, action.callBackFunction)
}
break
}
}
}
@@ -1,4 +1,4 @@
function newFoundationsFunctionLibrarySocialBotsFunctions() {
function newSocialBotsFunctionLibrarySocialBotsFunctions() {
let thisObject = {
sendTelegramTestMessage: sendTelegramTestMessage,
sendDiscordTestMessage: sendDiscordTestMessage,
@@ -186,49 +186,6 @@ function newFoundationsFunctionLibrarySocialBotsFunctions() {
}
function sendTwitterTestMessage(node, callBackFunction) {
let message = JSON.stringify({text: "Test message from Superalgos!"})
let url = "https://api.twitter.com/1.1/statuses/update.json"
httpRequestJSON(message, url, onResponse)
function onResponse(err) {
if (err.result === GLOBAL.DEFAULT_OK_RESPONSE.result) {
node.payload.uiObject.setInfoMessage('Twitter status update sent.')
callBackFunction(GLOBAL.DEFAULT_OK_RESPONSE)
} else {
node.payload.uiObject.setErrorMessage('Could not send Twitter status update. 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: xmlHttpRequest.responseText
});
return;
}
};
if (pContentToSend === undefined) {
xmlHttpRequest.open("GET", pPath, true);
xmlHttpRequest.send();
} else {
try {
let blob = new Blob([pContentToSend]);
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 })
}
}
}
}
}
+2069 -1
View File
File diff suppressed because it is too large. Load diff