IPC Event Handler Implemented and working well
This commit is contained in:
1 parent
0074b7ce0f
commit
0dfe957db7
12 files changed
+299
-136
No files matched your search
+36
-35
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+143
@@ -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)
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -24,6 +24,9 @@
|
||||
<Compile Include="Assistant.js">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="EventHandler.js">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Integrations\Ecosystem.js" />
|
||||
<Compile Include="Integrations\FileStorage.js" />
|
||||
<Compile Include="Integrations\Definition.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();
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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 */
|
||||
|
||||
|
||||
Generated
+33
@@ -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",
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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"
|
||||
}
|
||||
]
|
||||
+5
-5
@@ -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",
|
||||
|
||||
Reference in new issue
Block a user