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

This commit is contained in:
DougJCook committed 2021-03-06 04:24:43 -05:00
commit 1a5ddd81a4
20 files changed
+551 -85

No files matched your search

+9
View File
@@ -0,0 +1,9 @@
Data-Storage
Log-Files
My-Workspaces
debug.log
*.db
.git*
.vscode
+9
View File
@@ -0,0 +1,9 @@
FROM node:15-alpine
WORKDIR /app
COPY . .
RUN adduser --disabled-password --no-create-home superalgos
RUN chown -R superalgos:superalgos /app
USER superalgos
EXPOSE 34248
EXPOSE 18041
ENTRYPOINT ["node", "run", "noBrowser"]
+16
View File
@@ -0,0 +1,16 @@
version: "3"
services:
superalgos:
build:
context: ..
dockerfile: ./Docker/Dockerfile
image: superalgos
command: ["minMemo"]
ports:
- '34248:34248'
- '18041:18041'
volumes:
- ../Data-Storage:/app/Data-Storage
- ../Log-Files:/app/Log-Files
- ../My-Workspaces:/app/My-Workspaces
restart: on-failure
@@ -0,0 +1,13 @@
{
"type": "Project Schema File",
"definition": {
"text": "It is the most basic and low level system-wide configuration file. You will find it at the Projects folder. It contains a list of all integrated projects and for each one the list of javascript modules organized in different categories, like Function Libraries, Utilities, Spaces, Globals, etc; in turn organized into the broather categories UI, TS and CL.",
"updated": 1614939492529
},
"paragraphs": [
{
"style": "Text",
"text": "Left 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 doscs.save to save your changes and app.contribute to send it to the main repository."
}
]
}
@@ -1,9 +1,8 @@
{
"topic": "How to Automate Actions at The Design Space",
"pageNumber": "3",
"type": "Automating Actions - Adding a Children Node Property",
"type": "UI Global Object",
"definition": {
"text": "Write a summary for this topic page."
"text": "It is a global object available at the browser, containing at runtime a structure of objects ranging from Utilities, Function Libraries, Spaces and others, ready to be accessed and their functions consumed from anywhere within the UI.",
"updated": 1614941411500
},
"paragraphs": [
{
@@ -39,6 +39,23 @@
{
"style": "Javascript",
"text": "docs.repaginate Topic from Superalgos: Docs Commands"
},
{
"style": "Title",
"text": "Usage"
},
{
"style": "Text",
"text": "After you repaginate a Topic or Tutorial, the best way to proceed it to manually delete from disk all the files associated with that Topic / Tutorial. After you delete them, you execute the repaginate command and then the docs.save command. "
},
{
"style": "Text",
"text": "The repagination flags all of the files of that Topic / Tutorial as changed, so you don't need to worry about the deleted files since they will be all recreated.",
"updated": 1614942454596
},
{
"style": "Text",
"text": "After repagination, reload the UI to get into memory only the repaginated version."
}
]
}
@@ -1,36 +1,50 @@
{
"topic": "How to Automate Actions at The Design Space",
"pageNumber": "1",
"pageNumber": 1,
"type": "Automating Actions - What is an Action?",
"definition": {
"text": "An Action is what is executed when users picks something from the menu of a Node.",
"updated": 1614788525702
"text": "An Action is what is executed when users picks something from the menu of a Node. ",
"updated": 1614941717428
},
"paragraphs": [
{
"style": "Title",
"text": "Why a New Action",
"updated": 1614939785554
},
{
"style": "Text",
"text": "These actions are implemented as functions inside a Function Library. So the basic workflow to implement a new action is the following:",
"updated": 1614788734425
"text": "Maybe you realized that you are doing repetitive actions at the Design Space and you can benefit from automating them. If your actions are constrained to manipulating the nodes at the workspace, by either creating new nodes, deleting existing ones, changing nodes configs, establishing references or some other similar stuff, then you might be able to create an Action function that can automate all this. This will allow you to stop doing those repetitive tasks youself and the ones that will come after you if you contribute these changes to the project.",
"updated": 1614940379811
},
{
"style": "Title",
"text": "Workflow"
},
{
"style": "Text",
"text": "New Actions are implemented as functions inside a Function Library. So the basic workflow to implement a new Action is the following:",
"updated": 1614940407806
},
{
"style": "List",
"text": "Add Menu Item: First you need to add a Menu Item for the node type that will allow the user to execute your action.",
"updated": 1614790023220
"text": "Add a Menu Item: First you need to add a Menu Item to the node type that will allow the user to execute your action.",
"updated": 1614940496055
},
{
"style": "List",
"text": "Locate Function Library: Then you will need to locate the Function Library that is better suited to host the function that is going to be executed once the action is triggered.",
"updated": 1614790037292
"text": "Locate a Function Library: Then you will need to locate the Function Library that is better suited to host the function that is going to be executed once the action is triggered.",
"updated": 1614926393154
},
{
"style": "List",
"text": "Add your Code: Then you will write the code for that function.",
"updated": 1614790047291
"text": "Add your Code: Then you will need to write the code for that function.",
"updated": 1614940528253
},
{
"style": "List",
"text": "Connect Menu Item to your Code: Finally you will connect the Menu Item to that function.",
"updated": 1614790060302
"text": "Connect Menu Item to your Code: Finally you will connect the Menu Item to that function you wrote.",
"updated": 1614940545908
}
]
}
@@ -1,26 +1,39 @@
{
"topic": "How to Automate Actions at The Design Space",
"pageNumber": "2",
"pageNumber": 2,
"type": "Automating Actions - Adding a Menu Item",
"definition": {
"text": "You need to add a new Menu Item at the node definition at the App Schema.",
"updated": 1614788860135
"text": "You need to add a new Menu Item at the node definition at the App Schema. ",
"updated": 1614941725823
},
"paragraphs": [
{
"style": "Title",
"text": "Locate App Schema",
"updated": 1614927344633
},
{
"style": "Text",
"text": "Check out the page of the App Schema concept. After that, locate the App Schema file of the Projects folder. There is one App Schema file for Project, pick the right one and edit it with VS Code.",
"updated": 1614788974626
"text": "Check out the page of the App Schema concept. After that, locate the App Schema file you will need to edit at the Projects folder. There is one App Schema file for Project, pick the right one and edit it with VS Code."
},
{
"style": "Warning",
"text": "Be carefull not to damage anything in there while editing. You will get into trouble if you do so. It can not only produce the UI not to load, but it can also damage the workspace you are working at.",
"updated": 1614789073656
"text": "Be carefull not to damage anything in the App Schema file while editing it. You will get into trouble if you do so. It can not only produce the UI not to load, but it can also damage the workspace you are working at.",
"updated": 1614940590024
},
{
"style": "Success",
"text": "If you are not sure which project a certain node belongs to, there is a trick to find it out: close the Docs tab, and make focus on the node you want to add an Action to. While on focus, use Ctrl + Shift + Alt + F12 to log in the browser console the Node object. Inspect it to see the project property. Most likely it will be a Superalgos project's node.",
"updated": 1614940654950
},
{
"style": "Title",
"text": "Add Menu Item",
"updated": 1614927443573
},
{
"style": "Text",
"text": "Locate inside the file, the definition of the Node Type you want to add the new Action to. Once localted add a menu item object to the menuItems array, like in the following example:",
"updated": 1614789152442
"text": "Locate inside the file, the definition of the Node Type you want to add the new Action to. Once localted add a menu item object to the menuItems array, like in the following example:"
},
{
"style": "Json",
@@ -29,12 +42,13 @@
},
{
"style": "Text",
"text": "The example above is most likely what you need to add. For completeness, this is the list of properties this object can have:",
"updated": 1614789977840
"text": "The example above is most likely what you need to add, except that you will need to type the right values for each of those 4 properties. For completeness, this is the list of properties this object can have:",
"updated": 1614940732785
},
{
"style": "List",
"text": "action: define a name for your action. Capitalize each first letter please."
"text": "action: define a name for your action. Capitalize each first letter please. This won't be seen by users.",
"updated": 1614927479016
},
{
"style": "List",
@@ -42,19 +56,23 @@
},
{
"style": "List",
"text": "label: this is what is going to be read by the user at the Node's menu."
"text": "label: this is what is going to be read by users at the Node's menu.",
"updated": 1614927503634
},
{
"style": "List",
"text": "relatedUiObject: optional. You can define here a Node Type. The system will use for the Menu Item icon, the image associated to the Node Type you define here."
"text": "relatedUiObject: optional. You can define here a Node Type. The system will use for the Menu Item icon the image associated to the Node Type you define here.",
"updated": 1614927562326
},
{
"style": "List",
"text": "askConfirmation: true if you want the user to confirm with an extra click."
"text": "askConfirmation: true if you want users to confirm with an extra click.",
"updated": 1614927580831
},
{
"style": "List",
"text": "confirmationLabel: the text the user will read when asked to confirm."
"text": "confirmationLabel: the text users will read when asked to confirm.",
"updated": 1614927596195
},
{
"style": "List",
@@ -0,0 +1,47 @@
{
"topic": "How to Automate Actions at The Design Space",
"pageNumber": 3,
"type": "Automating Actions - Locating the Right Function Library",
"definition": {
"text": "Actions are packed inside Function Libraries. Most likely there is a Function Library already created that is related to the Action you want to create. ",
"updated": 1614941736977
},
"paragraphs": [
{
"style": "Text",
"text": "The procedure to locate a suitable Function Library is very easy. Open the Projects folder, getting into the Project the Node where the action is going to be triggered at is defined. Inside that project Folder get into the UI folder and then into Function-Libraries folder.",
"updated": 1614940833232
},
{
"style": "Note",
"text": "Each file in there is a Function Library except for the one called ActionSwitch.js, which is the place where you connect the Action Function name you defined at the App Schema with the function that will host the code for the new Action.",
"updated": 1614928708817
},
{
"style": "Text",
"text": "Inspect each of these files and see at their header the functions they already implement. After a quick scan over all of them you can decide which one is where your action belongs to. If you believe that your Action should be placed at a new Function Library, then you can try to add a new one and set it up at the Project Schema file, but that is out of the scope of this guide.",
"updated": 1614928780531
},
{
"style": "Title",
"text": "Good Examples",
"updated": 1614929743894
},
{
"style": "Text",
"text": "Take a look at these Function Libraries that represent Hierarchies, because most likely your node belongs to a Hierarchy that already has a Function Library associated with it."
},
{
"style": "List",
"text": "ChartingSpaceFunctions"
},
{
"style": "List",
"text": "CryptoEcosystemFunctions"
},
{
"style": "List",
"text": "PluginsFunctions"
}
]
}
@@ -0,0 +1,51 @@
{
"topic": "How to Automate Actions at The Design Space",
"pageNumber": 4,
"type": "Automating Actions - Adding your Function",
"definition": {
"text": "Take a look at how other functions are implemented in the Function Library and try to follow that way.",
"updated": 1614941850917
},
"paragraphs": [
{
"style": "Text",
"text": "The basic procedure is quite straight forward. First add the function name to the thisObject and the write you function at the most appropiate place at the Function Library. ",
"updated": 1614941084806
},
{
"style": "Important",
"text": "Please document your function the best you can, even if you see the other functions implemented at the same library poorly documented. See if you can make your function the best documented in the whole library."
},
{
"style": "Title",
"text": "Example of thisObject"
},
{
"style": "Javascript",
"text": " thisObject = {\n addMissingExchanges: addMissingExchanges,\n addMissingAssets: addMissingAssets,\n addMissingMarkets: addMissingMarkets,\n installMarket: installMarket,\n uninstallMarket: uninstallMarket\n }",
"updated": 1614929327521
},
{
"style": "Title",
"text": "Function Parameters"
},
{
"style": "Text",
"text": "Your function will receive some parameters, including the Node object that hosted the Menu Item that triggered your Action. The exact list of parameters will be defined by yourself later at the step Automating Actions - Adding an Action Switch Case. Here is a short list of the most common parameters you might later include:",
"updated": 1614931548904
},
{
"style": "List",
"text": "node: the node object that hosted the Menu Item that triggered your Action"
},
{
"style": "List",
"text": "rootNodes: An array of nodes that are floating at the Design Space without parents. This includes all hierarchy heads.",
"updated": 1614931639516
},
{
"style": "Text",
"text": ""
}
]
}
@@ -1,14 +0,0 @@
{
"topic": "How to Automate Actions at The Design Space",
"pageNumber": "4",
"type": "Automating Actions - Locating the Right Function Library",
"definition": {
"text": "Write a summary for this topic page."
},
"paragraphs": [
{
"style": "Text",
"text": "Left 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 doscs.save to save your changes and app.contribute to send it to the main repository."
}
]
}
@@ -1,14 +0,0 @@
{
"topic": "How to Automate Actions at The Design Space",
"pageNumber": "5",
"type": "Automating Actions - Adding your Function",
"definition": {
"text": "Write a summary for this topic page."
},
"paragraphs": [
{
"style": "Text",
"text": "Left 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 doscs.save to save your changes and app.contribute to send it to the main repository."
}
]
}
@@ -0,0 +1,66 @@
{
"topic": "How to Automate Actions at The Design Space",
"pageNumber": 5,
"type": "Automating Actions - Using Utilities",
"definition": {
"text": "Lower level functionality is packed in Utilities files by topic. There are already many utilities files with operations that will save you time while trying to implement your own Action. ",
"updated": 1614941756401
},
"paragraphs": [
{
"style": "Text",
"text": "It is a very good idea to invest some time at the Utilities folder, scaning the files in there to see what you already have available to use at your actions. You will see that other actions in Function Libraries heavily rely on utilities functions defined at one of the files at the Utilities folder.",
"updated": 1614930012933
},
{
"style": "Title",
"text": "How to Call an Utility Function?",
"updated": 1614942924609
},
{
"style": "Text",
"text": "At runtime, all utility objects will be already instantiated by the time your Action function code runs. You just need to get to the object that host the utility funtion you want to execute via the UI Global Object that is available to you. For exmaple:"
},
{
"style": "Javascript",
"text": "let allLayers = UI.projects.superalgos.utilities.branches.nodeBranchToArray(botLayers, 'Layer')",
"updated": 1614930217705
},
{
"style": "Text",
"text": "The way to find out which is the property name of a certain utility object is by reading the definitions at the Project Schema File. The utility object hosting the nodeBranchToArray function used in the example above, is defined at the Project Schema File in this way:",
"updated": 1614943148547
},
{
"style": "Json",
"text": "{\n \"name\": \"Branches\",\n \"propertyName\": \"branches\",\n \"functionName\": \"newSuperalgosUtilitiesBranches\"\n }",
"updated": 1614930415663
},
{
"style": "Text",
"text": "The propertyName is what you need to know in order to get to the runtime reference of the utility object and execute it's functions.",
"updated": 1614930462629
},
{
"style": "Title",
"text": "Example: Change a Node's Config",
"updated": 1614943976780
},
{
"style": "Text",
"text": "This is the way you programatically manipulate the config of a Node:"
},
{
"style": "Javascript",
"text": "UI.projects.superalgos.utilities.nodeConfig.savePropertyAtNodeConfig(node.payload,'showPanels', true)"
},
{
"style": "Text",
"text": ""
},
{
"style": "Text",
"text": ""
}
]
}
@@ -0,0 +1,115 @@
{
"topic": "How to Automate Actions at The Design Space",
"pageNumber": 6,
"type": "Automating Actions - Using Function Libraries",
"definition": {
"text": "You might also as well other functions located at Function Libraries from within your Action Function. In order to do this, you just need to locate the instance of the Function Library Object and call any of it's functions.",
"updated": 1614942828678
},
"paragraphs": [
{
"style": "Text",
"text": "It is a very good idea to invest some time at the Function-Libraries folder, scaning the files in there to see what you already have available to use at your actions. You will see that other actions in Function Libraries heavily rely on functions defined at one of the files at the Function-Libraries folder.",
"updated": 1614942900881
},
{
"style": "Title",
"text": "How to Call an Function Library Function?",
"updated": 1614942916741
},
{
"style": "Text",
"text": "At runtime, all Funtion Library objects will be already instantiated by the time your Action function code runs. You just need to get to the object that host the Function Library funtion you want to execute via the UI Global Object that is available to you. For exmaple:",
"updated": 1614942976608
},
{
"style": "Javascript",
"text": "UI.projects.superalgos.functionLibraries.dataStorageFunctions.createSessionReference(marketLearningProducts, session, 'Learning Session Reference')",
"updated": 1614943049167
},
{
"style": "Text",
"text": "The way to find out which is the property name of a certain Function Library object is by reading the definitions at the Project Schema File. The Function Library object hosting the createSessionReference function used in the example above, is defined at the Project Schema File in this way:",
"updated": 1614943202556
},
{
"style": "Json",
"text": "{\n \"name\": \"Data Storage Functions\",\n \"propertyName\": \"dataStorageFunctions\",\n \"functionName\": \"newSuperalgosFunctionLibraryDataStorageFunctions\"\n }",
"updated": 1614943237559
},
{
"style": "Text",
"text": "The propertyName is what you need to know in order to get to the runtime reference of the Function Library object and execute it's functions.",
"updated": 1614943257490
},
{
"style": "Title",
"text": "Popular Functions"
},
{
"style": "Text",
"text": "At your own Action Function you might likely need to execute these functions, belonging to popular actions done at Action Functions:",
"updated": 1614943932540
},
{
"style": "Subtitle",
"text": "Add a New Node"
},
{
"style": "Text",
"text": "The following is an example on how to add a new children to an existing Node:"
},
{
"style": "Javascript",
"text": "dataStorage = UI.projects.superalgos.functionLibraries.uiObjectsFromNodes.addUIObject(networkNode, 'Data Storage')",
"updated": 1614943544233
},
{
"style": "Text",
"text": ""
},
{
"style": "Subtitle",
"text": "Delete an Existing Node"
},
{
"style": "Text",
"text": "This is an example on how to Delete an existing Node:"
},
{
"style": "Javascript",
"text": "UI.projects.superalgos.functionLibraries.nodeDeleter.deleteUIObject(projectReference, rootNodes)",
"updated": 1614943594904
},
{
"style": "Subtitle",
"text": "Establish a Reference Parent"
},
{
"style": "Text",
"text": "Example of how to set the Reference Parent of a Node (in this case no Function Library is needed):",
"updated": 1614944033214
},
{
"style": "Javascript",
"text": "node.payload.referenceParent = baseAsset\n",
"updated": 1614943688069
},
{
"style": "Text",
"text": ""
},
{
"style": "Text",
"text": ""
},
{
"style": "Text",
"text": ""
},
{
"style": "Text",
"text": ""
}
]
}
@@ -1,14 +0,0 @@
{
"topic": "How to Automate Actions at The Design Space",
"pageNumber": "6",
"type": "Automating Actions - Using Utilities",
"definition": {
"text": "Write a summary for this topic page."
},
"paragraphs": [
{
"style": "Text",
"text": "Left 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 doscs.save to save your changes and app.contribute to send it to the main repository."
}
]
}
@@ -1,14 +1,66 @@
{
"topic": "How to Automate Actions at The Design Space",
"pageNumber": "7",
"pageNumber": 7,
"type": "Automating Actions - Using the Workspace",
"definition": {
"text": "Write a summary for this topic page."
"text": "The workspace object will give you access to all the hierarchies of nodes, and once there you will be able to manipulate those structures at will.",
"updated": 1614941811976
},
"paragraphs": [
{
"style": "Text",
"text": "Left 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 doscs.save to save your changes and app.contribute to send it to the main repository."
"text": "You can access to the workspace object in this way:",
"updated": 1614931075101
},
{
"style": "Javascript",
"text": "UI.projects.superalgos.spaces.designSpace.workspace",
"updated": 1614931100393
},
{
"style": "Text",
"text": "Check for the functions defined at thisObject what can be useful in your case. ",
"updated": 1614931205528
},
{
"style": "Text",
"text": "It is not very common to use the Workspace object from an Action, since you have access to the rootNodes array directly as a parameter of your Action function. Useful Workspace function for this use case might be:",
"updated": 1614931466216
},
{
"style": "List",
"text": "getProjectsHeads",
"updated": 1614931357766
},
{
"style": "List",
"text": "getHierarchyHeads",
"updated": 1614931364737
},
{
"style": "List",
"text": "getHierarchyHeadsById",
"updated": 1614931372173
},
{
"style": "List",
"text": "getHierarchyHeadsByType",
"updated": 1614931380751
},
{
"style": "List",
"text": "getNodeThatIsOnFocus",
"updated": 1614931389528
},
{
"style": "List",
"text": "getNodeByShortcutKey",
"updated": 1614931399849
},
{
"style": "List",
"text": "getNodeById",
"updated": 1614931406224
}
]
}
@@ -1,14 +1,58 @@
{
"topic": "How to Automate Actions at The Design Space",
"pageNumber": "8",
"pageNumber": 8,
"type": "Automating Actions - Adding an Action Switch Case",
"definition": {
"text": "Write a summary for this topic page."
"text": "This steps create the mapping betwheen the actionFunction name you defined at the Menu Item of the node that can trigger your Action, and the function you coded inside a Function Library that will execute the code for the new Action. ",
"updated": 1614941772231
},
"paragraphs": [
{
"style": "Title",
"text": "Action Switch File",
"updated": 1614937860642
},
{
"style": "Text",
"text": "Left 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 doscs.save to save your changes and app.contribute to send it to the main repository."
"text": "Locate the ActionSwitch.js file inside the Function-Libraries folder. There you will find a gigantic switch instruction with a case for each Action available at the current Project."
},
{
"style": "Text",
"text": "Find within the list of cases some of the cases pointint to the same Function Library your new Action is hosted at, so that you can add a new case together with the rest.",
"updated": 1614937904095
},
{
"style": "Title",
"text": "Add a New Case",
"updated": 1614938281975
},
{
"style": "Text",
"text": "The case string must match the actionFunction you defined at the Menu Item. Your function call should be something like this:"
},
{
"style": "Javascript",
"text": "UI.projects.superalgos.functionLibraries.pluginsFunctions.pluginMissingTradingEngines(action.node, action.rootNodes)\n",
"updated": 1614938043930
},
{
"style": "Success",
"text": "As you can see will you most likely be sending the node and rootNodes parameters into your Action function. You might want to also send other parameters from data you might find into the action object available to you at that point.",
"updated": 1614938157839
},
{
"style": "Text",
"text": "The property name needed to get to the reference of your Function Library object at runtime can be found at the definition of that Function Library located at the Project Schema File. The one corresponding to the example above is this one, for instance:"
},
{
"style": "Json",
"text": "{\n \"name\": \"Plugins Functions\",\n \"propertyName\": \"pluginsFunctions\",\n \"functionName\": \"newSuperalgosFunctionLibraryPluginsFunctions\"\n }",
"updated": 1614938194636
},
{
"style": "Text",
"text": "You can use whatever you find at propertyName to get to the Function Library object at runtime. With this, the mapping is complete.",
"updated": 1614938237127
}
]
}
@@ -1,14 +1,25 @@
{
"topic": "How to Automate Actions at The Design Space",
"pageNumber": "9",
"pageNumber": 9,
"type": "Automating Actions - Testing your Action",
"definition": {
"text": "Write a summary for this topic page."
"text": "To test your new Action you just need to reload the UI, locate the node with the new Menu Item, and click on it...",
"updated": 1614941791574
},
"paragraphs": [
{
"style": "Title",
"text": "Debug",
"updated": 1614939140622
},
{
"style": "Text",
"text": "Left 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 doscs.save to save your changes and app.contribute to send it to the main repository."
"text": "In order to debug your action, you will need to open the developer tool, and at the Sources tab, locate the Function Library file where you added your action, place a breakpoint at the begining of your function and go and click at the node Menu Item you added."
},
{
"style": "Success",
"text": "If you change the code of your function, reload the UI and you can debug it again with the new changes.",
"updated": 1614939195464
}
]
}
@@ -50,6 +50,33 @@
"style": "Text",
"text": "Over time some users tested Binanceus, which works with the same config as Binance and some other users ventured into others with unknown results. If you manage to put an exhange to work please let us know with which config so that we can move that exchange to the Tested Exchanges branch of the Crypto Ecosystem."
},
{
"style": "Title",
"text": "Your Favorite Exchange is not Listed"
},
{
"style": "Text",
"text": "There are many reasons why an exchange might not be listed even at the Untested Exchanges node. Hera are some of them:",
"updated": 1614949670526
},
{
"style": "Text",
"text": "1. When the list was created it did not exist (you can try Add Missing Exchanges menu item of the Crypto Exchanges node)"
},
{
"style": "Text",
"text": "2. It is not listed at the CCXT library included with Superalgos (an npm update would be needed at the right folder to update the library). If it appears after the update, please inform the team so as to update it for all.",
"updated": 1614949724133
},
{
"style": "Text",
"text": "3. The exchange does not support historical data at 1 min (you can check the exchange API docs). Escahnges that do not support this are filtered out while running Add Missing Exchanges command.",
"updated": 1614949756265
},
{
"style": "Text",
"text": "4. The exchange does not support the function to list it's markets. (Also check the exchange API docs)"
},
{
"style": "Title",
"text": "Getting Started"
@@ -105,7 +105,7 @@ exports.newSuperalgosBotModulesHistoricOHLCVs = function (processIndex) {
}
if (API.useFetchTradesForFetchOHLCVs !== undefined) {
useFetchTradesForFetchOHLCVs = API.useFetchTradesForFetchOHLCVs
if (API.maxExchangeTrades !== undefined) {
if (API.maxTradesPerFetch !== undefined) {
maxTradesPerFetch = API.maxTradesPerFetch
}
}