From 1c24e10e83a2bcc655d7bbd174be82c387ee1df8 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 5 Mar 2020 12:13:11 +0100 Subject: [PATCH] CCXT implementation --- .../FunctionLibraries/CCXTFunctions.js | 55 +++++++++++++++++++ DesignSpace/Workspace/Workspace.js | 19 ++++++- FloatingSpace/UiObjectConstructor.js | 2 +- 3 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 DesignSpace/Workspace/FunctionLibraries/CCXTFunctions.js diff --git a/DesignSpace/Workspace/FunctionLibraries/CCXTFunctions.js b/DesignSpace/Workspace/FunctionLibraries/CCXTFunctions.js new file mode 100644 index 000000000..167fcd855 --- /dev/null +++ b/DesignSpace/Workspace/FunctionLibraries/CCXTFunctions.js @@ -0,0 +1,55 @@ +function newCCXTFunctions () { + thisObject = { + addMissingExchanges: addMissingExchanges, + addMissingAssets: addMissingAssets, + addMissingMarkets: addMissingMarkets + } + + return thisObject + + function addMissingExchanges (node, functionLibraryUiObjectsFromNodes) { + currentExchanges = new Map() + for (let j = 0; j < node.exchanges.length; j++) { + let exchange = node.exchanges[j] + let codeName = loadPropertyFromNodeConfig(exchange.payload, 'codeName') + currentExchanges.set(codeName, exchange) + } + for (let i = 0; i < ccxt.exchanges.length; i++) { + let exchangeId = ccxt.exchanges[i] + let existingExchange = currentExchanges.get(exchangeId) + if (existingExchange === undefined) { + const exchangeClass = ccxt[exchangeId] + const exchangeConstructorParams = { + 'timeout': 30000, + 'enableRateLimit': true, + verbose: false + } + + let ccxtExchange = new exchangeClass(exchangeConstructorParams) + + if (ccxtExchange.has.fetchOHLCV === true) { + if (ccxtExchange.timeframes['1m'] !== undefined) { + let newExchange = functionLibraryUiObjectsFromNodes.addUIObject(node, 'Crypto Exchange') + newExchange.name = ccxtExchange.name + newExchange.code = '{ \n\"codeName\": \"' + ccxtExchange.id + '\"\n}' + newExchange.payload.floatingObject.collapseToggle() + newExchange.exchangeAssets.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 + newExchange.exchangeMarkets.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 + newExchange.exchangeAccounts.payload.floatingObject.angleToParent = ANGLE_TO_PARENT.RANGE_180 + newExchange.exchangeAssets.payload.floatingObject.distanceToParent = DISTANCE_TO_PARENT.PARENT_050X + newExchange.exchangeMarkets.payload.floatingObject.distanceToParent = DISTANCE_TO_PARENT.PARENT_100X + newExchange.exchangeAccounts.payload.floatingObject.distanceToParent = DISTANCE_TO_PARENT.PARENT_025X + } + } + } + } + } + + function addMissingAssets (node, functionLibraryUiObjectsFromNodes) { + + } + + function addMissingMarkets (node, functionLibraryUiObjectsFromNodes) { + + } +} diff --git a/DesignSpace/Workspace/Workspace.js b/DesignSpace/Workspace/Workspace.js index a844763d3..136cce8fe 100644 --- a/DesignSpace/Workspace/Workspace.js +++ b/DesignSpace/Workspace/Workspace.js @@ -57,6 +57,7 @@ function newWorkspace () { let functionLibraryShortcutKeys = newShortcutKeys() let functionLibraryOnFocus = newOnFocus() let functionLibrarySuperScripts = newSuperScriptsFunctions() + let functionLibraryCCXTFunctions = newCCXTFunctions() thisObject.nodeChildren = newNodeChildren() @@ -88,7 +89,7 @@ function newWorkspace () { functionLibraryUiObjectsFromNodes.recreateWorkspace(thisObject.workspaceNode) thisObject.enabled = true - setInterval(saveWorkspace, 30000) + setInterval(saveWorkspace, 10000) } catch (err) { if (ERROR_LOG === true) { logger.write('[ERROR] initialize -> err = ' + err.stack) } } @@ -370,6 +371,22 @@ function newWorkspace () { functionLibraryTaskFunctions.stopAllExchangeTasks(payload.node, functionLibraryProtocolNode) } break + case 'Add Missing Crypto Exchanges': + { + functionLibraryCCXTFunctions.addMissingExchanges(payload.node, functionLibraryUiObjectsFromNodes) + } + break + case 'Add Missing Assets': + { + functionLibraryCCXTFunctions.addMissingAssets(payload.node, functionLibraryUiObjectsFromNodes) + } + break + case 'Add Missing Markets': + { + functionLibraryCCXTFunctions.addMissingMarkets(payload.node, functionLibraryUiObjectsFromNodes) + } + break + case 'Run Session': { functionLibrarySessionFunctions.runSession(payload.node, functionLibraryProtocolNode, callBackFunction) diff --git a/FloatingSpace/UiObjectConstructor.js b/FloatingSpace/UiObjectConstructor.js index 9d6f5bb78..82077883e 100644 --- a/FloatingSpace/UiObjectConstructor.js +++ b/FloatingSpace/UiObjectConstructor.js @@ -84,7 +84,7 @@ function newUiObjectConstructor () { for (let j = 0; j < menuItems.length; j++) { let item = menuItems[j] item.angle = undefined - if (item.action.indexOf('Add ') >= 0 && item.action.indexOf('Missing') >= 0) { + if (item.action.indexOf('Add Missing Children') >= 0) { item.action = 'Add Missing Children' } if (item.action.indexOf('Delete ') >= 0) {