From 0dfe957db734c0794ca8024bbd30f33625489c0a Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 5 Sep 2019 18:53:32 +0200 Subject: [PATCH] IPC Event Handler Implemented and working well --- Assistant.js | 71 ++++++++--------- EventHandler.js | 143 ++++++++++++++++++++++++++++++++++ MultiPeriod.js | 4 + Project.njsproj | 3 + Root.js | 27 ------- Run.js | 77 +++++++++++++++--- SensorBotProcessMainLoop.js | 4 +- TradingBotProcessMainLoop.js | 5 -- package-lock.json | 33 ++++++++ package.json | 1 + sequence - all processes.json | 57 ++------------ sequence.json | 10 +-- 12 files changed, 299 insertions(+), 136 deletions(-) create mode 100644 EventHandler.js diff --git a/Assistant.js b/Assistant.js index 75ac8c03a..293a657fd 100644 --- a/Assistant.js +++ b/Assistant.js @@ -63,7 +63,8 @@ } case 'Backtest': { - getMarketRateFromIndicator(); + // getMarketRateFromIndicator(); NOTE: This path is disabled since for now we do not allow ticker in simulation. Also it allow us to ship a dataset without bruce + validateExchangeSyncronicity(); break; } @@ -112,13 +113,13 @@ validateExchangeSyncronicity(); } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> getMarketRateFromExchange -> onTicker -> err = "+ err.stack); + logger.write(MODULE_NAME, "[ERROR] initialize -> getMarketRateFromExchange -> onTicker -> err = " + err.stack); callBackFunction(global.DEFAULT_FAIL_RESPONSE); } } } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> getMarketRateFromExchange -> err = "+ err.stack); + logger.write(MODULE_NAME, "[ERROR] initialize -> getMarketRateFromExchange -> err = " + err.stack); callBackFunction(global.DEFAULT_FAIL_RESPONSE); } } @@ -156,12 +157,12 @@ let candleArray; if (err.result === global.CUSTOM_FAIL_RESPONSE.result || err.code === "The specified key does not exist." || err.message === "File does not exist.") { // Just past midnight, this file will not exist for a couple of minutes. - + logger.write(MODULE_NAME, "[WARN] initialize -> getMarketRateFromIndicator -> onFileReceived -> err = " + JSON.stringify(err)); logger.write(MODULE_NAME, "[WARN] initialize -> getMarketRateFromIndicator -> This could happen when there are still holes on trades and the process needs to catch up. "); callBackFunction(global.DEFAULT_FAIL_RESPONSE); return; - + } if (err.result === global.DEFAULT_OK_RESPONSE.result) { @@ -211,7 +212,7 @@ } } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> getMarketRateFromIndicator -> err = "+ err.stack); + logger.write(MODULE_NAME, "[ERROR] initialize -> getMarketRateFromIndicator -> err = " + err.stack); callBackFunction(global.DEFAULT_FAIL_RESPONSE); } } @@ -253,13 +254,13 @@ } } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> validateExchangeSyncronicity -> onDone -> err = "+ err.stack); + logger.write(MODULE_NAME, "[ERROR] initialize -> validateExchangeSyncronicity -> onDone -> err = " + err.stack); callBackFunction(global.DEFAULT_FAIL_RESPONSE); } } } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> onDone -> err = "+ err.stack); + logger.write(MODULE_NAME, "[ERROR] initialize -> onDone -> err = " + err.stack); callBackFunction(global.DEFAULT_FAIL_RESPONSE); } } @@ -313,14 +314,14 @@ callBackFunction(global.DEFAULT_OK_RESPONSE); } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> calculateProfits -> err = "+ err.stack); + logger.write(MODULE_NAME, "[ERROR] initialize -> calculateProfits -> err = " + err.stack); callBack(global.DEFAULT_FAIL_RESPONSE); return; } } } catch (err) { - logger.write(MODULE_NAME, "[ERROR] initialize -> err = "+ err.stack); + logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.stack); callBackFunction(global.DEFAULT_FAIL_RESPONSE); } } @@ -399,7 +400,7 @@ } } } catch (err) { - logger.write(MODULE_NAME, "[ERROR] getPositionsAtExchange -> err = "+ err.stack); + logger.write(MODULE_NAME, "[ERROR] getPositionsAtExchange -> err = " + err.stack); callBack(global.DEFAULT_FAIL_RESPONSE); } } @@ -561,17 +562,17 @@ if (thisPosition.id === pPositionId) { - let feeRate = 0.002; // Default backtesting fee simulation + let feeRate = 0.002; // Default backtesting fee simulation - let trade = { - id: Math.trunc(Math.random(1) * 1000000), - type: thisPosition.type, - rate: thisPosition.rate.toString(), + let trade = { + id: Math.trunc(Math.random(1) * 1000000), + type: thisPosition.type, + rate: thisPosition.rate.toString(), amountA: thisObject.truncDecimals(thisPosition.amountA).toString(), amountB: thisObject.truncDecimals(thisPosition.amountB).toString(), fee: thisObject.truncDecimals(feeRate).toString(), - date: (new Date()).valueOf() - } + date: (new Date()).valueOf() + } trades.push(trade); @@ -626,12 +627,12 @@ break; } } catch (err) { - logger.write(MODULE_NAME, "[ERROR] ordersExecutionCheck -> loopBody -> getPositionTradesAtExchange -> onResponse -> err = "+ err.stack); + logger.write(MODULE_NAME, "[ERROR] ordersExecutionCheck -> loopBody -> getPositionTradesAtExchange -> onResponse -> err = " + err.stack); callBack(global.DEFAULT_FAIL_RESPONSE); } } } catch (err) { - logger.write(MODULE_NAME, "[ERROR] ordersExecutionCheck -> loopBody -> getPositionTradesAtExchange -> err = "+ err.stack); + logger.write(MODULE_NAME, "[ERROR] ordersExecutionCheck -> loopBody -> getPositionTradesAtExchange -> err = " + err.stack); callBack(global.DEFAULT_FAIL_RESPONSE); } } @@ -656,7 +657,7 @@ let sumRate = 0; for (let k = 0; k < pTrades.length; k++) { - let trade = pTrades[k]; + let trade = pTrades[k]; sumAssetA = sumAssetA + thisObject.truncDecimals(trade.amountA); sumAssetB = sumAssetB + thisObject.truncDecimals(trade.amountB); sumRate = sumRate + thisObject.truncDecimals(trade.rate); @@ -704,7 +705,7 @@ next(); } catch (err) { - logger.write(MODULE_NAME, "[ERROR] ordersExecutionCheck -> loopBody -> confirmOrderWasExecuted -> err = "+ err.stack); + logger.write(MODULE_NAME, "[ERROR] ordersExecutionCheck -> loopBody -> confirmOrderWasExecuted -> err = " + err.stack); callBack(global.DEFAULT_FAIL_RESPONSE); return; } @@ -726,8 +727,8 @@ let sumAssetA = 0; let sumAssetB = 0; - for (let k = 0; k < pTrades.length; k++) { - let trade = pTrades[k]; + for (let k = 0; k < pTrades.length; k++) { + let trade = pTrades[k]; sumAssetA = sumAssetA + thisObject.truncDecimals(trade.amountA); sumAssetB = sumAssetB + thisObject.truncDecimals(trade.amountB); } @@ -749,7 +750,7 @@ */ let exchangeParam = exchangeAPI.getMaxDecimalPositions(); - let minValue = '0.' + (1).toPrecision(exchangeParam-1).split('.').reverse().join(''); + let minValue = '0.' + (1).toPrecision(exchangeParam - 1).split('.').reverse().join(''); let exchangePrecision = parseFloat(parseFloat(minValue).toFixed(exchangeParam)); if (Math.abs(position.amountA - sumAssetA) > exchangePrecision || Math.abs(position.amountB - sumAssetB) > exchangePrecision) { @@ -790,7 +791,7 @@ next(); } catch (err) { - logger.write(MODULE_NAME, "[ERROR] ordersExecutionCheck -> loopBody -> confirmOrderWasPartiallyExecuted -> err = "+ err.stack); + logger.write(MODULE_NAME, "[ERROR] ordersExecutionCheck -> loopBody -> confirmOrderWasPartiallyExecuted -> err = " + err.stack); callBack(global.DEFAULT_FAIL_RESPONSE); return; } @@ -857,7 +858,7 @@ context.executionContext.balance.assetA = thisObject.truncDecimals(context.executionContext.balance.assetA + assetA); context.executionContext.balance.assetB = thisObject.truncDecimals(context.executionContext.balance.assetB - assetB); - context.executionContext.availableBalance.assetA = thisObject.truncDecimals(context.executionContext.availableBalance.assetA + assetA); + context.executionContext.availableBalance.assetA = thisObject.truncDecimals(context.executionContext.availableBalance.assetA + assetA); /* Not the available balance for asset B is not affected since it was already reduced when the order was placed. */ @@ -865,14 +866,14 @@ } } catch (err) { - logger.write(MODULE_NAME, "[ERROR] ordersExecutionCheck -> loopBody -> applyTradesToContext -> err = "+ err.stack); + logger.write(MODULE_NAME, "[ERROR] ordersExecutionCheck -> loopBody -> applyTradesToContext -> err = " + err.stack); callBack(global.DEFAULT_FAIL_RESPONSE); return; } } } catch (err) { - logger.write(MODULE_NAME, "[ERROR] ordersExecutionCheck -> loopBody -> err = "+ err.stack); + logger.write(MODULE_NAME, "[ERROR] ordersExecutionCheck -> loopBody -> err = " + err.stack); callBack(global.DEFAULT_FAIL_RESPONSE); return; } @@ -911,7 +912,7 @@ } } catch (err) { - logger.write(MODULE_NAME, "[ERROR] ordersExecutionCheck -> err = "+ err.stack); + logger.write(MODULE_NAME, "[ERROR] ordersExecutionCheck -> err = " + err.stack); callBack(global.DEFAULT_FAIL_RESPONSE); } } @@ -1075,12 +1076,12 @@ break; } } catch (err) { - logger.write(MODULE_NAME, "[ERROR] putPosition -> onResponse -> err = "+ err.stack); + logger.write(MODULE_NAME, "[ERROR] putPosition -> onResponse -> err = " + err.stack); callBackFunction(global.DEFAULT_FAIL_RESPONSE); } } } catch (err) { - logger.write(MODULE_NAME, "[ERROR] putPosition -> err = "+ err.stack); + logger.write(MODULE_NAME, "[ERROR] putPosition -> err = " + err.stack); callBackFunction(global.DEFAULT_FAIL_RESPONSE); } } @@ -1199,12 +1200,12 @@ break; } } catch (err) { - logger.write(MODULE_NAME, "[ERROR] movePosition -> onResponse -> err = "+ err.stack); + logger.write(MODULE_NAME, "[ERROR] movePosition -> onResponse -> err = " + err.stack); callBackFunction(global.DEFAULT_FAIL_RESPONSE); } } } catch (err) { - logger.write(MODULE_NAME, "[ERROR] movePosition -> err = "+ err.stack); + logger.write(MODULE_NAME, "[ERROR] movePosition -> err = " + err.stack); callBackFunction(global.DEFAULT_FAIL_RESPONSE); } } @@ -1330,7 +1331,7 @@ let runIndex = context.statusReport.runs.length - 1; context.newHistoryRecord.messageRelevance = pRelevance; - context.newHistoryRecord.messageTitle = bot.startMode + "." + runIndex +": "+ pTitle; + context.newHistoryRecord.messageTitle = bot.startMode + "." + runIndex + ": " + pTitle; context.newHistoryRecord.messageBody = pBody; } diff --git a/EventHandler.js b/EventHandler.js new file mode 100644 index 000000000..401a40a49 --- /dev/null +++ b/EventHandler.js @@ -0,0 +1,143 @@ +exports.newEventHandler = function newEventHandler() { + let thisObject = { + initialize: initialize, + createEventHandler: createEventHandler, + deleteEventHandler: deleteEventHandler, + listenToEvent: listenToEvent, + stopListening: stopListening, + raiseEvent: raiseEvent + } + + let ipc = require('node-ipc'); + let eventListeners = new Map() + let responseWaiters = new Map() + + ipc.config.id = 'Clone Executor'; + ipc.config.retry = 1500; + + return thisObject + + function initialize(callBackFunction) { + + ipc.connectTo( + 'world', + function () { + ipc.of.world.on( + 'connect', + function () { + ipc.log('## Connected to Superalgos Event Server ##'.rainbow, ipc.config.delay); + + let eventCommand = { + action: 'greetings', + from: 'Clone Executor' + } + + sendCommand(eventCommand) + + callBackFunction() + } + ); + ipc.of.world.on( + 'disconnect', + function () { + ipc.log('Disconnected from Superalgos Event Server '.notice); + } + ); + ipc.of.world.on( + 'message', // here is where all incomming messages are processed. + function (data) { + ipc.log('Got a message from Superalgos Event Server: '.debug, data); + + let message = JSON.parse(data) + + if (message.action === 'Event Raised') { + let handler = eventListeners.get(message.eventHandlerName + '-' + message.eventType) + if (handler) { + handler(message) + } + return + } + + if (message.action === 'Event Server Response') { + let handler = responseWaiters.get(message.callerId) + if (handler) { + handler(message) + } + return + } + } + ); + } + ); + } + + function sendCommand(command, responseCallBack, eventsCallBack) { + + if (command.action === 'listenToEvent') { + eventListeners.set(command.eventHandlerName + '-' + command.eventType, eventsCallBack) + } + if (command.callerId && responseCallBack) { + responseWaiters.set(command.callerId, responseCallBack) + } + + ipc.of.world.emit( + 'message', + JSON.stringify(command) + ) + } + + function createEventHandler(eventHandlerName, callerId, responseCallBack) { + let eventCommand = { + action: 'createEventHandler', + eventHandlerName: eventHandlerName, + callerId: callerId + } + + sendCommand(eventCommand, responseCallBack) + } + + function deleteEventHandler(eventHandlerName, callerId, responseCallBack) { + let eventCommand = { + action: 'deleteEventHandler', + eventHandlerName: eventHandlerName, + callerId: callerId + } + + sendCommand(eventCommand, responseCallBack) + } + + function listenToEvent(eventHandlerName, eventType, extraData, callerId, responseCallBack, eventsCallBack) { + eventCommand = { + action: 'listenToEvent', + eventHandlerName: eventHandlerName, + eventType: eventType, + extraData: extraData, + callerId: callerId + } + + sendCommand(eventCommand, responseCallBack, eventsCallBack) + } + + function stopListening(eventHandlerName, eventSubscriptionId, callerId, responseCallBack) { + eventCommand = { + action: 'stopListening', + eventHandlerName: eventHandlerName, + eventSubscriptionId: eventSubscriptionId, + callerId: callerId + } + + sendCommand(eventCommand, responseCallBack) + } + + function raiseEvent(eventHandlerName, eventType, event, callerId, responseCallBack) { + let eventCommand = { + action: 'raiseEvent', + eventHandlerName: eventHandlerName, + eventType: eventType, + event: event, + callerId: callerId + } + + sendCommand(eventCommand, responseCallBack) + } +} \ No newline at end of file diff --git a/MultiPeriod.js b/MultiPeriod.js index fa414ff94..39745a489 100644 --- a/MultiPeriod.js +++ b/MultiPeriod.js @@ -984,6 +984,10 @@ thisReport.save(callBack); bot.hasTheBotJustStarted = false; + + /* Emit event that signals that this process finished */ + global.eventHandler.raiseEvent('Jason-Multi-Period', 'Status Report Updated', { lastProcessedDay: lastFileDate }) + } catch (err) { logger.write(MODULE_NAME, "[ERROR] start -> writeDailyStatusReport -> err = " + err.stack); diff --git a/Project.njsproj b/Project.njsproj index a6dd72273..8c8f00478 100644 --- a/Project.njsproj +++ b/Project.njsproj @@ -24,6 +24,9 @@ Code + + Code + diff --git a/Root.js b/Root.js index 2e6c123c6..1e031b898 100644 --- a/Root.js +++ b/Root.js @@ -1,32 +1,5 @@ exports.newRoot = function newRoot() { - /* Callbacks default responses. */ - - global.DEFAULT_OK_RESPONSE = { - result: "Ok", - message: "Operation Succeeded" - }; - - global.DEFAULT_FAIL_RESPONSE = { - result: "Fail", - message: "Operation Failed" - }; - - global.DEFAULT_RETRY_RESPONSE = { - result: "Retry", - message: "Retry Later" - }; - - global.CUSTOM_OK_RESPONSE = { - result: "Ok, but check Message", - message: "Custom Message" - }; - - global.CUSTOM_FAIL_RESPONSE = { - result: "Fail Because", - message: "Custom Message" - }; - /* This is the Execution Datetime */ global.EXECUTION_DATETIME = new Date(); diff --git a/Run.js b/Run.js index 389ea570d..6156a8432 100644 --- a/Run.js +++ b/Run.js @@ -1,3 +1,55 @@ +/* Callbacks default responses. */ + +global.DEFAULT_OK_RESPONSE = { + result: "Ok", + message: "Operation Succeeded" +}; + +global.DEFAULT_FAIL_RESPONSE = { + result: "Fail", + message: "Operation Failed" +}; + +global.DEFAULT_RETRY_RESPONSE = { + result: "Retry", + message: "Retry Later" +}; + +global.CUSTOM_OK_RESPONSE = { + result: "Ok, but check Message", + message: "Custom Message" +}; + +global.CUSTOM_FAIL_RESPONSE = { + result: "Fail Because", + message: "Custom Message" +}; + +const EVENT_HANDLER_MODULE = require('./EventHandler.js'); +global.eventHandler = EVENT_HANDLER_MODULE.newEventHandler() + +global.eventHandler.initialize(bootLoader) + +function bootLoader() { + + global.eventHandler.createEventHandler('Jason-Multi-Period') + + tryToListenToCockpit() + + function tryToListenToCockpit() { + + global.eventHandler.listenToEvent('Cockpit-Restart-Simulation', 'Simulation Started', undefined, 'Clone Executor Boot Loader', onResponse, startSequence) + + function onResponse(message) { + if (message.result !== global.DEFAULT_OK_RESPONSE.result) { + setTimeout(tryToListenToCockpit, 3000) + } + } + } +} + +/* Old Run.js code follows... */ + require('dotenv').config(); global.DEFINITION = require(process.env.INTER_PROCESS_FILES_PATH + '/Definition'); @@ -5,7 +57,7 @@ const definition = global.DEFINITION const path = require('path'); global.SHALL_BOT_STOP = false -global.AT_BREAKPOINT = false // This is used only when running at the browser. + global.FULL_LOG = process.env.FULL_LOG /* Default parameters can be changed by the execution configuration */ @@ -40,18 +92,21 @@ if (process.env.RUN_SEQUENCE !== undefined) { isRunSequence = JSON.parse(process.env.RUN_SEQUENCE) } -if (isRunSequence) { - process.on('message', message => { - if (message === 'STOP') { - runClonExecutor = false; - console.log("[INFO] CloneExecutor -> Clone Executor Stopped."); - } - }); - sequenceExecution(sequenceStep) -} else { - readExecutionConfiguration() +function startSequence () { + if (isRunSequence) { + process.on('message', message => { + if (message === 'STOP') { + runClonExecutor = false; + console.log("[INFO] CloneExecutor -> Clone Executor Stopped."); + } + }); + sequenceExecution(sequenceStep) + } else { + readExecutionConfiguration() + } } + async function sequenceExecution(currentStep) { let execution = sequenceList[currentStep]; diff --git a/SensorBotProcessMainLoop.js b/SensorBotProcessMainLoop.js index 37ac495e7..73c03c2ed 100644 --- a/SensorBotProcessMainLoop.js +++ b/SensorBotProcessMainLoop.js @@ -51,7 +51,9 @@ return; } USER_BOT_MODULE = {} - + if (bot.process === "Hole-Fixing") { + //USER_BOT_MODULE.newUserBot = require(process.env.BOTS_PATH + '/aamasters/AAMasters/bots/AACharly-Sensor-Bot/Hole-Fixing/User.Bot').newUserBot + } USER_BOT_MODULE.newUserBot = eval(text); // TODO This needs to be changed function filePath = global.DEV_TEAM + "/" + "bots" + "/" + bot.repo; diff --git a/TradingBotProcessMainLoop.js b/TradingBotProcessMainLoop.js index 63ba92fc9..6db2d7c29 100644 --- a/TradingBotProcessMainLoop.js +++ b/TradingBotProcessMainLoop.js @@ -260,11 +260,6 @@ if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> bot.processDatetime = " + bot.processDatetime.toISOString()); } - if (global.AT_BREAKPOINT === true) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] run -> loop -> Plot Breakpoint Hit."); } - - } /* High level log entry */ diff --git a/package-lock.json b/package-lock.json index b2391e70d..400d53cef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -202,6 +202,11 @@ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.0.0.tgz", "integrity": "sha512-30xVGqjLjiUOArT4+M5q9sYdvuR4riM6yK9wMcas9Vbp6zZa+ocC9dp6QoftuhTPhFAiLK/0C5Ni2nou/Bk8lg==" }, + "easy-stack": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.0.tgz", + "integrity": "sha1-EskbMIWjfwuqM26UhurEv5Tj54g=" + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -224,6 +229,11 @@ "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz", "integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA==" }, + "event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz", + "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==" + }, "extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -344,6 +354,19 @@ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" }, + "js-message": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.5.tgz", + "integrity": "sha1-IwDSSxrwjondCVvBpMnJz8uJLRU=" + }, + "js-queue": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.0.tgz", + "integrity": "sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug=", + "requires": { + "easy-stack": "1.0.0" + } + }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", @@ -435,6 +458,16 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "node-ipc": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.1.1.tgz", + "integrity": "sha512-FAyICv0sIRJxVp3GW5fzgaf9jwwRQxAKDJlmNFUL5hOy+W4X/I5AypyHoq0DXXbo9o/gt79gj++4cMr4jVWE/w==", + "requires": { + "event-pubsub": "4.3.0", + "js-message": "1.0.5", + "js-queue": "2.0.0" + } + }, "nonce": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/nonce/-/nonce-1.0.4.tgz", diff --git a/package.json b/package.json index c676322d5..d13992b3a 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "@superalgos/mqservice": "^0.0.17", "axios": "^0.19.0", "dotenv": "^8.0.0", + "node-ipc": "^9.1.1", "winston": "^3.2.1" } } diff --git a/sequence - all processes.json b/sequence - all processes.json index 20650bd26..0ae6028e3 100644 --- a/sequence - all processes.json +++ b/sequence - all processes.json @@ -14,26 +14,26 @@ { "devTeam": "AAMasters", "bot": "AACharly", - "mode": "noTime", + "mode": "oneMonth", "resumeExecution": true, "type": "Sensor", "exchangeName": "Poloniex", "process": "Hole-Fixing", "startYear": 2019, - "endYear": 2021, - "month": 1 + "endYear": 2019, + "month": 9 }, { "devTeam": "AAMasters", "bot": "AABruce", - "mode": "noTime", + "mode": "oneMonth", "resumeExecution": true, "type": "Indicator", "exchangeName": "Poloniex", "process": "Single-Period-Daily", "startYear": 2019, "endYear": 2021, - "month": 1 + "month": 9 }, { "devTeam": "AAMasters", @@ -141,52 +141,5 @@ "process": "Multi-Period-Daily", "beginDatetime": "2019-08-01T08:00:00.000Z", "timePeriod": "05-min" - }, - { - "devTeam": "AAVikings", - "bot": "AAGauss", - "mode": "noTime", - "resumeExecution": true, - "type": "Indicator", - "exchangeName": "Poloniex", - "process": "Multi-Period-Daily", - "startYear": 2019, - "endYear": 2021, - "month": 1 - }, - { - "devTeam": "AAVikings", - "bot": "AAGauss", - "mode": "noTime", - "resumeExecution": true, - "type": "Indicator", - "exchangeName": "Poloniex", - "process": "Multi-Period-Market", - "startYear": 2019, - "endYear": 2021, - "month": 1 - }, - { - "devTeam": "vikingsalerts", - "bot": "simulator-bot-vikingsalerts", - "mode": "noTime", - "resumeExecution": true, - "type": "Indicator", - "exchangeName": "Poloniex", - "process": "Multi-Period-Daily", - "beginDatetime": "2019-08-01T08:00:00.000Z", - "timePeriod": "05-min" - }, - { - "devTeam": "vikingsalerts", - "bot": "bot-vikingsalerts", - "mode": "live", - "resumeExecution": true, - "type": "Trading", - "exchangeName": "Poloniex", - "process": "Trading-Process", - "beginDatetime": "2019-08-01T08:00:00.000Z", - "timePeriod": "05-min", - "dataSet": "Multi-Period-Daily" } ] diff --git a/sequence.json b/sequence.json index 10ca0ec47..0ae6028e3 100644 --- a/sequence.json +++ b/sequence.json @@ -14,26 +14,26 @@ { "devTeam": "AAMasters", "bot": "AACharly", - "mode": "noTime", + "mode": "oneMonth", "resumeExecution": true, "type": "Sensor", "exchangeName": "Poloniex", "process": "Hole-Fixing", "startYear": 2019, - "endYear": 2021, - "month": 1 + "endYear": 2019, + "month": 9 }, { "devTeam": "AAMasters", "bot": "AABruce", - "mode": "noTime", + "mode": "oneMonth", "resumeExecution": true, "type": "Indicator", "exchangeName": "Poloniex", "process": "Single-Period-Daily", "startYear": 2019, "endYear": 2021, - "month": 1 + "month": 9 }, { "devTeam": "AAMasters",