From 7acce7d61760a2d27cc1af0e6aa88859180309f6 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Mon, 1 Apr 2019 14:07:35 +0200 Subject: [PATCH 1/8] Coss added at configuration, Bruce process updated --- Multi-Period-Daily/User.bot.js | 6 ++---- Multi-Period-Market/User.bot.js | 6 ++---- this.bot.config.json | 14 ++++++++++---- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/Multi-Period-Daily/User.bot.js b/Multi-Period-Daily/User.bot.js index 776fe8eb6..d395cd559 100644 --- a/Multi-Period-Daily/User.bot.js +++ b/Multi-Period-Daily/User.bot.js @@ -9,8 +9,6 @@ const MODULE_NAME = "User Bot"; - const EXCHANGE_NAME = "Poloniex"; - const TRADES_FOLDER_NAME = "Trades"; const CANDLES_FOLDER_NAME = "Candles"; @@ -105,7 +103,7 @@ Read the candles and volumes from Bruce and produce a file for each day and for /* We look first for Charly in order to get when the market starts. */ - reportKey = "AAMasters" + "-" + "AACharly" + "-" + "Poloniex-Historic-Trades" + "-" + "dataSet.V1"; + reportKey = "AAMasters" + "-" + "AACharly" + "-" + "Historic-Trades" + "-" + "dataSet.V1"; if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> reportKey = " + reportKey); } statusReport = statusDependencies.statusReports.get(reportKey); @@ -141,7 +139,7 @@ Read the candles and volumes from Bruce and produce a file for each day and for /* Second, we get the report from Bruce, to know when the marted ends. */ - reportKey = "AAMasters" + "-" + "AABruce" + "-" + "One-Min-Daily-Candles-Volumes" + "-" + "dataSet.V1" + "-" + bot.processDatetime.getUTCFullYear() + "-" + utilities.pad(bot.processDatetime.getUTCMonth() + 1,2); + reportKey = "AAMasters" + "-" + "AABruce" + "-" + "Single-Period-Daily" + "-" + "dataSet.V1" + "-" + bot.processDatetime.getUTCFullYear() + "-" + utilities.pad(bot.processDatetime.getUTCMonth() + 1,2); if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> reportKey = " + reportKey); } statusReport = statusDependencies.statusReports.get(reportKey); diff --git a/Multi-Period-Market/User.bot.js b/Multi-Period-Market/User.bot.js index 22e66fe8b..dfccc5cb8 100644 --- a/Multi-Period-Market/User.bot.js +++ b/Multi-Period-Market/User.bot.js @@ -9,8 +9,6 @@ const MODULE_NAME = "User Bot"; - const EXCHANGE_NAME = "Poloniex"; - const TRADES_FOLDER_NAME = "Trades"; const CANDLES_FOLDER_NAME = "Candles"; @@ -116,7 +114,7 @@ /* We look first for Charly in order to get when the market starts. */ - reportKey = "AAMasters" + "-" + "AACharly" + "-" + "Poloniex-Historic-Trades" + "-" + "dataSet.V1"; + reportKey = "AAMasters" + "-" + "AACharly" + "-" + "Historic-Trades" + "-" + "dataSet.V1"; if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> reportKey = " + reportKey); } statusReport = statusDependencies.statusReports.get(reportKey); @@ -152,7 +150,7 @@ /* Second, we get the report from Bruce, to know when the marted ends. */ - reportKey = "AAMasters" + "-" + "AABruce" + "-" + "One-Min-Daily-Candles-Volumes" + "-" + "dataSet.V1" + "-" + bot.processDatetime.getUTCFullYear() + "-" + utilities.pad(bot.processDatetime.getUTCMonth() + 1,2); + reportKey = "AAMasters" + "-" + "AABruce" + "-" + "Single-Period-Daily" + "-" + "dataSet.V1" + "-" + bot.processDatetime.getUTCFullYear() + "-" + utilities.pad(bot.processDatetime.getUTCMonth() + 1,2); if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> getContextVariables -> reportKey = " + reportKey); } statusReport = statusDependencies.statusReports.get(reportKey); diff --git a/this.bot.config.json b/this.bot.config.json index 6690403fd..103733067 100644 --- a/this.bot.config.json +++ b/this.bot.config.json @@ -45,7 +45,7 @@ "major": 1, "minor": 0 }, - "process": "Poloniex-Historic-Trades", + "process": "Historic-Trades", "dataSetVersion": "dataSet.V1" }, { @@ -55,7 +55,7 @@ "major": 1, "minor": 0 }, - "process": "One-Min-Daily-Candles-Volumes", + "process": "Single-Period-Daily", "dataSetVersion": "dataSet.V1", "dataSetSection": "Month" }, @@ -105,7 +105,7 @@ "major": 1, "minor": 0 }, - "process": "Poloniex-Historic-Trades", + "process": "Historic-Trades", "dataSetVersion": "dataSet.V1" }, { @@ -115,7 +115,7 @@ "major": 1, "minor": 0 }, - "process": "One-Min-Daily-Candles-Volumes", + "process": "Single-Period-Daily", "dataSetVersion": "dataSet.V1", "dataSetSection": "Month" }, @@ -161,6 +161,9 @@ "exchangeList": [ { "name": "Poloniex" + }, + { + "name": "Coss" } ], "plotter": { @@ -197,6 +200,9 @@ "exchangeList": [ { "name": "Poloniex" + }, + { + "name": "Coss" } ], "plotter": { From 16b4bdf948b0cb421bb8c4333548a30f70a76b37 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Sat, 6 Apr 2019 09:46:19 +0200 Subject: [PATCH 2/8] Logging to console Improved --- Multi-Period-Daily/User.bot.js | 24 +++++++++++++++++++++--- Multi-Period-Market/User.bot.js | 28 +++++++++++++++++++++++++--- 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/Multi-Period-Daily/User.bot.js b/Multi-Period-Daily/User.bot.js index d395cd559..0e692f908 100644 --- a/Multi-Period-Daily/User.bot.js +++ b/Multi-Period-Daily/User.bot.js @@ -313,6 +313,8 @@ Read the candles and volumes from Bruce and produce a file for each day and for bruceStorage.getTextFile(filePath, fileName, onFileReceived, true); + console.log("[INFO] start -> buildCandles -> periodsLoop -> loopBody -> getting file at dateForPath = " + dateForPath); + function onFileReceived(err, text) { try { @@ -333,9 +335,19 @@ Read the candles and volumes from Bruce and produce a file for each day and for return; } } else { - logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> Error Received -> err = " + err.message); - callBackFunction(err); - return; + + if (err.message === 'File does not exist.') { + + logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> Dependency Not Ready -> err = " + err.message); + logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> Asuming this is a temporary situation. Requesting a Retry."); + callBackFunction(global.DEFAULT_RETRY_RESPONSE); + return; + + } else { + logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> Error Received -> err = " + err.message); + callBackFunction(err); + return; + } } const inputCandlesPerdiod = 60 * 1000; // 1 min @@ -429,6 +441,8 @@ Read the candles and volumes from Bruce and produce a file for each day and for bruceStorage.getTextFile(filePath, fileName, onFileReceived, true); + console.log("[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> getting file at dateForPath = " + dateForPath); + function onFileReceived(err, text) { if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> onFileReceived -> Entering function."); } @@ -592,6 +606,8 @@ Read the candles and volumes from Bruce and produce a file for each day and for oliviaStorage.createTextFile(filePath, fileName, fileContent + '\n', onFileCreated); + console.log("[INFO] start -> writeFiles -> writeCandles -> creating file at filePath = " + filePath); + function onFileCreated(err) { if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeCandles -> onFileCreated -> Entering function."); } @@ -643,6 +659,8 @@ Read the candles and volumes from Bruce and produce a file for each day and for oliviaStorage.createTextFile(filePath, fileName, fileContent + '\n', onFileCreated); + console.log("[INFO] start -> writeFiles -> writeVolumes -> creating file at filePath = " + filePath); + function onFileCreated(err) { if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeVolumes -> onFileCreated -> Entering function."); } diff --git a/Multi-Period-Market/User.bot.js b/Multi-Period-Market/User.bot.js index dfccc5cb8..97e08977c 100644 --- a/Multi-Period-Market/User.bot.js +++ b/Multi-Period-Market/User.bot.js @@ -280,6 +280,8 @@ oliviaStorage.getTextFile(filePath, fileName, onFileReceived); + console.log("[INFO] start -> findPreviousContent -> loopBody -> getCandles -> getting file."); + function onFileReceived(err, text) { if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> loopBody -> getCandles -> onFileReceived -> Entering function."); } @@ -320,6 +322,8 @@ oliviaStorage.getTextFile(filePath, fileName, onFileReceived); + console.log("[INFO] start -> findPreviousContent -> loopBody -> getVolumes -> getting file."); + function onFileReceived(err, text) { if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> loopBody -> getVolumes -> onFileReceived -> Entering function."); } @@ -530,6 +534,8 @@ bruceStorage.getTextFile(filePath, fileName, onFileReceived, true); + console.log("[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> getting file at dateForPath = " + dateForPath); + function onFileReceived(err, text) { try { @@ -550,9 +556,19 @@ return; } } else { - logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> Error Received -> err = " + err.message); - callBackFunction(err); - return; + + if (err.message === 'File does not exist.') { + + logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> Dependency Not Ready -> err = " + err.message); + logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> Asuming this is a temporary situation. Requesting a Retry."); + callBackFunction(global.DEFAULT_RETRY_RESPONSE); + return; + + } else { + logger.write(MODULE_NAME, "[ERROR] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> onFileReceived -> Error Received -> err = " + err.message); + callBackFunction(err); + return; + } } const inputCandlesPerdiod = 60 * 1000; // 1 min @@ -651,6 +667,8 @@ bruceStorage.getTextFile(filePath, fileName, onFileReceived, true); + console.log("[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> getting file at dateForPath = " + dateForPath); + function onFileReceived(err, text) { if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> onFileReceived -> Entering function."); } @@ -797,6 +815,8 @@ oliviaStorage.createTextFile(filePath, fileName, fileContent + '\n', onFileCreated); + console.log("[INFO] start -> writeFiles -> writeCandles -> creating file at filePath = " + filePath); + function onFileCreated(err) { if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeCandles -> onFileCreated -> Entering function."); } @@ -847,6 +867,8 @@ oliviaStorage.createTextFile(filePath, fileName, fileContent + '\n', onFileCreated); + console.log("[INFO] start -> writeFiles -> writeVolumes -> creating file at filePath = " + filePath); + function onFileCreated(err) { if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeVolumes -> onFileCreated -> Entering function."); } From 08018ad848994e40deb0af16ed61991c3fcb7aeb Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Wed, 24 Apr 2019 20:36:18 +0200 Subject: [PATCH 3/8] Public Indicator declaration --- this.bot.config.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/this.bot.config.json b/this.bot.config.json index 103733067..51bd516dc 100644 --- a/this.bot.config.json +++ b/this.bot.config.json @@ -138,6 +138,7 @@ "displayName": "Candles", "description": "Two sets of files per period that contains candles.", "storageAccount": "aaolivia", + "shareWith": "Public", "dataSets": [ { "codeName": "Multi-Period-Market", @@ -177,6 +178,7 @@ "displayName": "Buy and Sell Volumes", "description": "Two sets of files per period that contains buy and sell volumes.", "storageAccount": "aaolivia", + "shareWith": "Public", "dataSets": [ { "codeName": "Multi-Period-Market", From a666941085282d8bf6603e9564c8cce5b1fe45c6 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 5 Apr 2019 11:45:06 +0200 Subject: [PATCH 4/8] Update README.md --- README.md | 66 ++++++++++++++++++++++--------------------------------- 1 file changed, 26 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index 710a9b6c1..c875cdfff 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,24 @@ -# I'm Olivia, an i-bot! -AKA an indicator algobot running on the AAPlatform by Advanced Algos Ltd. +# Olivia -### My Specialty +Olivia is a middle level Indicator bot that has as an input cnadles and volumes daily files and outputs 2 different datasets at different time-periods also of candles and volumnes. + +## Multi Period Daily + +This process generates files containing 1 day of candles or volumes each. + +### Start Mode + +This process runs every 1 minute under allMonths start mode, where a yearly range must be specified (initial processing year and final processing year) + +``` +"startMode": { + "noTime": { + "run": "true" + } + } +``` + +### Output I produce several datasets: * One with candles at 1, 2, 3, 4, 5, 10, 15, 20, 30, 45 minutes resolution; * One with candles at 1, 2, 3, 4, 6, 8, 12, 24 hours resolution; @@ -9,7 +26,7 @@ I produce several datasets: * One with volumes at 1, 2, 3, 4, 6, 8, 12, 24 hours resolution. ### Ideal for -My datasets are ideal for analysing candle shapes and types, candle patterns, volume fluctuations and for producing all kinds of studies based in those two (candles & volumes) Technical Analysis fundamentals, at multiple resolution levels. +Output datasets are the base for most common indicators and they become available at multiple resolution levels. ### Details @@ -17,19 +34,12 @@ My datasets are ideal for analysing candle shapes and types, candle patterns, vo |----------|----------|----------|----------|----------| | Olivia | Indicator | 1.0 | 28 Feb 2018 | dataSet.V1 | -# My Products +# Products ## Dataset 1: Daily Candles in Resolutions Below 1 hour -### Current Dataset Scope -* **Exchanges**: Poloniex -* **Markets**: USDT-BTC -* **Range**: Market Start Date – Current Time (-0 to 59 secs) - ### Current Dataset -* **Version:** dataSet.V1 -* **Update Frequency**: 1 minute -* **Cloud Output Location:** AAMasters > AAOlivia.1.0 > AACloud.1.1 > ExchangeName > dataSet.V1 + * **Folder Structure Tree**: Output > Candles > Multi-Period-Daily > (01-min | 02-min | 03-min | 04-min | 05-min | 10-min | 15-min | 20-min | 30-min | 45-min) > Year > Month > Day * **Files Structure**: One .json file stored at the Day level of the Folder Tree Structure * **In-File Record Structure**: @@ -44,15 +54,8 @@ My datasets are ideal for analysing candle shapes and types, candle patterns, vo ## Dataset 2: All-time, Market-long Candles in Resolutions Between 1 and 24 Hours -### Current Dataset Scope -* **Exchanges**: Poloniex -* **Markets**: USDT-BTC -* **Range**: Market Start Date – Current Time (-0 to 59 mins) - ### Current Dataset -* **Version:** dataSet.V1 -* **Update Frequency**: 1 hour -* **Cloud Output Location:** AAMasters > AAOlivia.1.0 > AACloud.1.1 > ExchangeName > dataSet.V1 + * **Folder Structure Tree**: Output > Candles > Multi-Period-Market > (01-hs| 02-hs | 03-hs | 04-hs | 06-hs | 08-hs | 12-hs | 24-hs) * **Files Structure**: One .json file stored at the deepest level of the Folder Tree Structure * **In-File Record Structure**: @@ -67,15 +70,8 @@ My datasets are ideal for analysing candle shapes and types, candle patterns, vo ## Dataset 3: Daily Volumes in Resolutions Below 1 hour -### Current Dataset Scope -* **Exchanges**: Poloniex -* **Markets**: USDT-BTC -* **Range**: Market Start Date – Current Time (-0 to 59 secs) - ### Current Dataset -* **Version:** dataSet.V1 -* **Update Frequency**: 1 minute -* **Cloud Output Location:** AAMasters > AAOlivia.1.0 > AACloud.1.1 > ExchangeName > dataSet.V1 + * **Folder Structure Tree**: Output > Volumes > Multi-Period-Daily > (01-min | 02-min | 03-min | 04-min | 05-min | 10-min | 15-min | 20-min | 30-min | 45-min) > Year > Month > Day * **Files Structure**: One .json file stored at the Day level of the Folder Tree Structure * **In-File Record Structure**: @@ -88,15 +84,8 @@ My datasets are ideal for analysing candle shapes and types, candle patterns, vo ## Dataset 4: All-time, Market-long Volumes in Resolutions Between 1 and 24 Hours -### Current Dataset Scope -* **Exchanges**: Poloniex -* **Markets**: USDT-BTC -* **Range**: Market Start Date – Current Time (-0 to 59 mins) - ### Current Dataset -* **Version:** dataSet.V1 -* **Update Frequency**: 1 hour -* **Cloud Output Location:** AAMasters > AAOlivia.1.0 > AACloud.1.1 > ExchangeName > dataSet.V1 + * **Folder Structure Tree**: Output > Volumes > Multi-Period-Market > (01-hs| 02-hs | 03-hs | 04-hs | 06-hs | 08-hs | 12-hs | 24-hs) > * **Files Structure**: One .json file stored at the deepest level of the Folder Tree Structure * **In-File Record Structure**: @@ -114,9 +103,6 @@ My datasets are ideal for analysing candle shapes and types, candle patterns, vo [AAMasters Charly](https://github.com/AAMasters/AACharly-Extraction-Bot) [AAMasters Bruce](https://github.com/AAMasters/AABruce-Indicator-Bot) -### Data as a Service (DaaS) Fees -No fees. - # Disclaimer THE AA MASTERS BOTS AND THEIR ASSOCIATED PRODUCTS AND SERVICES ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, SUITABILITY FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. From 8814d70fba28ab730c99421991387de8662c409c Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 5 Apr 2019 11:46:57 +0200 Subject: [PATCH 5/8] Update README.md --- README.md | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c875cdfff..8e9e718bf 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ This process generates files containing 1 day of candles or volumes each. ### Start Mode -This process runs every 1 minute under allMonths start mode, where a yearly range must be specified (initial processing year and final processing year) +This process runs every 1 minute under noTime start mode. ``` "startMode": { @@ -18,7 +18,23 @@ This process runs every 1 minute under allMonths start mode, where a yearly rang } ``` -### Output +## Multi Period Market + +This process generates files containing candles or volumes for the whole history of the market. + +### Start Mode + +This process runs every 1 minute under noTime start mode. + +``` +"startMode": { + "noTime": { + "run": "true" + } + } +``` + +## Output I produce several datasets: * One with candles at 1, 2, 3, 4, 5, 10, 15, 20, 30, 45 minutes resolution; * One with candles at 1, 2, 3, 4, 6, 8, 12, 24 hours resolution; From 0bb398fc273974c1db832f18dfdb77bbe4deb96d Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 5 Apr 2019 14:04:20 +0200 Subject: [PATCH 6/8] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8e9e718bf..16d92627a 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ This process runs every 1 minute under noTime start mode. ``` ## Output -I produce several datasets: +Several datasets are produced: * One with candles at 1, 2, 3, 4, 5, 10, 15, 20, 30, 45 minutes resolution; * One with candles at 1, 2, 3, 4, 6, 8, 12, 24 hours resolution; * One with volumes at 1, 2, 3, 4, 5, 10, 15, 20, 30, 45 minutes resolution; From f2643b53f0fa2bed31ad1a0422cc0a5f23fbc15c Mon Sep 17 00:00:00 2001 From: Matias Date: Sat, 22 Jun 2019 12:17:07 -0300 Subject: [PATCH 7/8] File storage dependency --- Commons.js | 66 ----------------------------- Multi-Period-Daily/User.bot.js | 60 +++++++------------------- Multi-Period-Market/User.bot.js | 74 +++++++++------------------------ 3 files changed, 36 insertions(+), 164 deletions(-) delete mode 100644 Commons.js diff --git a/Commons.js b/Commons.js deleted file mode 100644 index cefa994cd..000000000 --- a/Commons.js +++ /dev/null @@ -1,66 +0,0 @@ -exports.newCommons = function newCommons(bot, logger, UTILITIES) { - - const FULL_LOG = true; - const LOG_FILE_CONTENT = false; - - const MODULE_NAME = "Commons"; - - const GMT_SECONDS = ':00.000 GMT+0000'; - - let thisObject = { - initializeStorage: initializeStorage - }; - - let utilities = UTILITIES.newCloudUtilities(bot, logger); - - return thisObject; - - function initializeStorage(oliviaStorage, bruceStorage, callBackFunction) { - - try { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] initializeStorage -> Entering function."); } - - initializeBruceStorage(); - - function initializeBruceStorage() { - - bruceStorage.initialize(bot.devTeam, onBruceInizialized); - - function onBruceInizialized(err) { - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - - initializeOliviaStorage(); - - } else { - logger.write(MODULE_NAME, "[ERROR] initializeStorage -> initializeBruceStorage -> onBruceInizialized -> err = " + err.message); - callBackFunction(err); - } - } - } - - function initializeOliviaStorage() { - - oliviaStorage.initialize(bot.devTeam, onOliviaInizialized); - - function onOliviaInizialized(err) { - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } else { - logger.write(MODULE_NAME, "[ERROR] initializeStorage -> initializeOliviaStorage -> onOliviaInizialized -> err = " + err.message); - callBackFunction(err); - } - } - } - } - catch (err) { - logger.write(MODULE_NAME, "[ERROR] initializeStorage -> err = " + err.message); - callBackFunction(global.DEFAULT_FAIL_RESPONSE); - } - } - -}; \ No newline at end of file diff --git a/Multi-Period-Daily/User.bot.js b/Multi-Period-Daily/User.bot.js index 0e692f908..2e915a8bf 100644 --- a/Multi-Period-Daily/User.bot.js +++ b/Multi-Period-Daily/User.bot.js @@ -1,4 +1,4 @@ -exports.newUserBot = function newUserBot(bot, logger, COMMONS, UTILITIES, BLOB_STORAGE, FILE_STORAGE) { +exports.newUserBot = function newUserBot(bot, logger, COMMONS, UTILITIES, fileStorage) { const FULL_LOG = true; const LOG_FILE_CONTENT = false; @@ -17,16 +17,11 @@ const VOLUMES_FOLDER_NAME = "Volumes"; const VOLUMES_ONE_MIN = "One-Min"; - const commons = COMMONS.newCommons(bot, logger, UTILITIES); - thisObject = { initialize: initialize, start: start }; - let oliviaStorage = BLOB_STORAGE.newBlobStorage(bot, logger); - let bruceStorage = BLOB_STORAGE.newBlobStorage(bot, logger); - let utilities = UTILITIES.newCloudUtilities(bot, logger); let statusDependencies; @@ -44,20 +39,7 @@ statusDependencies = pStatusDependencies; - commons.initializeStorage(oliviaStorage, bruceStorage, onInizialized); - - function onInizialized(err) { - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] initialize -> onInizialized -> Initialization Succeed."); } - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } else { - logger.write(MODULE_NAME, "[ERROR] initialize -> onInizialized -> err = " + err.message); - callBackFunction(err); - } - } + callBackFunction(global.DEFAULT_OK_RESPONSE); } catch (err) { logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.message); @@ -69,7 +51,7 @@ This process is going to do the following: -Read the candles and volumes from Bruce and produce a file for each day and for each period with candles and volumes. +Read the candles and volumes from Bruce and produce a file for each day and for each period with candles and volumes. */ @@ -281,9 +263,9 @@ Read the candles and volumes from Bruce and produce a file for each day and for function periodsLoop() { /* - + We will iterate through all posible periods. - + */ let n = 0 // loop Variable representing each possible period as defined at the periods array. @@ -307,11 +289,9 @@ Read the candles and volumes from Bruce and produce a file for each day and for let fileName = market.assetA + '_' + market.assetB + ".json" let filePathRoot = bot.devTeam + "/" + "AABruce" + "." + bot.version.major + "." + bot.version.minor + "/" + global.PLATFORM_CONFIG.codeName + "." + global.PLATFORM_CONFIG.version.major + "." + global.PLATFORM_CONFIG.version.minor + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; let filePath = filePathRoot + "/Output/" + CANDLES_FOLDER_NAME + '/' + CANDLES_ONE_MIN + '/' + dateForPath; + filePath += '/' + fileName - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> fileName = " + fileName); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> filePath = " + filePath); } - - bruceStorage.getTextFile(filePath, fileName, onFileReceived, true); + fileStorage.getTextFile(bot.devTeam, filePath, onFileReceived, true); console.log("[INFO] start -> buildCandles -> periodsLoop -> loopBody -> getting file at dateForPath = " + dateForPath); @@ -353,7 +333,7 @@ Read the candles and volumes from Bruce and produce a file for each day and for const inputCandlesPerdiod = 60 * 1000; // 1 min const inputFilePeriod = 24 * 60 * 60 * 1000; // 24 hs - let totalOutputCandles = inputFilePeriod / outputPeriod; + let totalOutputCandles = inputFilePeriod / outputPeriod; let beginingOutputTime = contextVariables.lastCandleFile.valueOf(); for (let i = 0; i < totalOutputCandles; i++) { @@ -435,11 +415,9 @@ Read the candles and volumes from Bruce and produce a file for each day and for let fileName = market.assetA + '_' + market.assetB + ".json" let filePathRoot = bot.devTeam + "/" + "AABruce" + "." + bot.version.major + "." + bot.version.minor + "/" + global.PLATFORM_CONFIG.codeName + "." + global.PLATFORM_CONFIG.version.major + "." + global.PLATFORM_CONFIG.version.minor + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; let filePath = filePathRoot + "/Output/" + VOLUMES_FOLDER_NAME + '/' + VOLUMES_ONE_MIN + '/' + dateForPath; + filePath += '/' + fileName - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> fileName = " + fileName); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> filePath = " + filePath); } - - bruceStorage.getTextFile(filePath, fileName, onFileReceived, true); + fileStorage.getTextFile(bot.devTeam, filePath, onFileReceived, true); console.log("[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> getting file at dateForPath = " + dateForPath); @@ -600,11 +578,9 @@ Read the candles and volumes from Bruce and produce a file for each day and for let fileName = '' + market.assetA + '_' + market.assetB + '.json'; let dateForPath = contextVariables.lastCandleFile.getUTCFullYear() + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCMonth() + 1, 2) + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCDate(), 2); let filePath = bot.filePathRoot + "/Output/" + CANDLES_FOLDER_NAME + "/" + bot.process + "/" + timePeriod + "/" + dateForPath; + filePath += '/' + fileName - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeCandles -> fileName = " + fileName); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeCandles -> filePath = " + filePath); } - - oliviaStorage.createTextFile(filePath, fileName, fileContent + '\n', onFileCreated); + fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); console.log("[INFO] start -> writeFiles -> writeCandles -> creating file at filePath = " + filePath); @@ -653,11 +629,9 @@ Read the candles and volumes from Bruce and produce a file for each day and for let fileName = '' + market.assetA + '_' + market.assetB + '.json'; let dateForPath = contextVariables.lastCandleFile.getUTCFullYear() + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCMonth() + 1, 2) + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCDate(), 2); let filePath = bot.filePathRoot + "/Output/" + VOLUMES_FOLDER_NAME + "/" + bot.process + "/" + timePeriod + "/" + dateForPath; + filePath += '/' + fileName - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeVolumes -> fileName = " + fileName); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeVolumes -> filePath = " + filePath); } - - oliviaStorage.createTextFile(filePath, fileName, fileContent + '\n', onFileCreated); + fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); console.log("[INFO] start -> writeFiles -> writeVolumes -> creating file at filePath = " + filePath); @@ -743,11 +717,9 @@ Read the candles and volumes from Bruce and produce a file for each day and for let fileName = 'Data.Range.' + market.assetA + '_' + market.assetB + '.json'; let filePath = bot.filePathRoot + "/Output/" + pProductFolder + "/" + bot.process; + filePath += '/' + fileName - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDataRange -> fileName = " + fileName); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeDataRange -> filePath = " + filePath); } - - oliviaStorage.createTextFile(filePath, fileName, fileContent + '\n', onFileCreated); + fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); function onFileCreated(err) { diff --git a/Multi-Period-Market/User.bot.js b/Multi-Period-Market/User.bot.js index 97e08977c..342ddd680 100644 --- a/Multi-Period-Market/User.bot.js +++ b/Multi-Period-Market/User.bot.js @@ -1,4 +1,4 @@ -exports.newUserBot = function newUserBot(bot, logger, COMMONS, UTILITIES, BLOB_STORAGE, FILE_STORAGE) { +exports.newUserBot = function newUserBot(bot, logger, COMMONS, UTILITIES, fileStorage) { const FULL_LOG = true; const LOG_FILE_CONTENT = false; @@ -17,16 +17,11 @@ const VOLUMES_FOLDER_NAME = "Volumes"; const VOLUMES_ONE_MIN = "One-Min"; - const commons = COMMONS.newCommons(bot, logger, UTILITIES); - thisObject = { initialize: initialize, start: start }; - let oliviaStorage = BLOB_STORAGE.newBlobStorage(bot, logger); - let bruceStorage = BLOB_STORAGE.newBlobStorage(bot, logger); - let utilities = UTILITIES.newCloudUtilities(bot, logger); let statusDependencies; @@ -43,22 +38,7 @@ if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] initialize -> Entering function."); } statusDependencies = pStatusDependencies; - - commons.initializeStorage(oliviaStorage, bruceStorage, onInizialized); - - function onInizialized(err) { - - if (err.result === global.DEFAULT_OK_RESPONSE.result) { - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] initialize -> onInizialized -> Initialization Succeed."); } - callBackFunction(global.DEFAULT_OK_RESPONSE); - - } else { - logger.write(MODULE_NAME, "[ERROR] initialize -> onInizialized -> err = " + err.message); - callBackFunction(err); - } - } - + callBackFunction(global.DEFAULT_OK_RESPONSE); } catch (err) { logger.write(MODULE_NAME, "[ERROR] initialize -> err = " + err.message); callBackFunction(global.DEFAULT_FAIL_RESPONSE); @@ -80,7 +60,7 @@ 2. We know from out status report which was the last DAY we processed from Bruce, but we must be carefull, because that day mightn not have been complete, if the last run found the head of the market. That means that we have to be carefull not to append candles that are already there. To simplify what we do is to discard - all candles of the last processed day, and then we can process that full day again adding all the candles. + all candles of the last processed day, and then we can process that full day again adding all the candles. */ @@ -272,13 +252,10 @@ if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> loopBody -> getCandles -> Entering function."); } let fileName = '' + market.assetA + '_' + market.assetB + '.json'; - let filePath = bot.filePathRoot + "/Output/" + CANDLES_FOLDER_NAME + "/" + bot.process + "/" + timePeriod; + filePath += '/' + fileName - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> loopBody -> getCandles -> fileName = " + fileName); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> loopBody -> getCandles -> filePath = " + filePath); } - - oliviaStorage.getTextFile(filePath, fileName, onFileReceived); + fileStorage.getTextFile(bot.devTeam, filePath, onFileReceived); console.log("[INFO] start -> findPreviousContent -> loopBody -> getCandles -> getting file."); @@ -314,13 +291,10 @@ if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> loopBody -> getVolumes -> Entering function."); } let fileName = '' + market.assetA + '_' + market.assetB + '.json'; - let filePath = bot.filePathRoot + "/Output/" + VOLUMES_FOLDER_NAME + "/" + bot.process + "/" + timePeriod; + filePath += '/' + fileName - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> loopBody -> getVolumes -> fileName = " + fileName); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> findPreviousContent -> loopBody -> getVolumes -> filePath = " + filePath); } - - oliviaStorage.getTextFile(filePath, fileName, onFileReceived); + fileStorage.getTextFile(bot.devTeam, filePath, onFileReceived); console.log("[INFO] start -> findPreviousContent -> loopBody -> getVolumes -> getting file."); @@ -352,7 +326,7 @@ callBackFunction(err); } } - } + } } @@ -431,9 +405,9 @@ if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> Entering function."); } /* - + We will iterate through all posible periods. - + */ let n = 0 // loop Variable representing each possible period as defined at the periods array. @@ -515,7 +489,7 @@ /* From here on is where every iteration of the loop fully runs. Here is where we read Bruce's files and add their content to whatever we already have in our arrays in-memory. In this way the process will run as many days needed and it should only stop when it reaches - the head of the market. + the head of the market. */ nextCandleFile(); @@ -528,11 +502,9 @@ let fileName = market.assetA + '_' + market.assetB + ".json" let filePathRoot = bot.devTeam + "/" + "AABruce" + "." + bot.version.major + "." + bot.version.minor + "/" + global.PLATFORM_CONFIG.codeName + "." + global.PLATFORM_CONFIG.version.major + "." + global.PLATFORM_CONFIG.version.minor + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; let filePath = filePathRoot + "/Output/" + CANDLES_FOLDER_NAME + '/' + CANDLES_ONE_MIN + '/' + dateForPath; + filePath += '/' + fileName - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> fileName = " + fileName); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> filePath = " + filePath); } - - bruceStorage.getTextFile(filePath, fileName, onFileReceived, true); + fileStorage.getTextFile(bot.devTeam, filePath, onFileReceived, true); console.log("[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextCandleFile -> getting file at dateForPath = " + dateForPath); @@ -661,11 +633,9 @@ let fileName = market.assetA + '_' + market.assetB + ".json" let filePathRoot = bot.devTeam + "/" + "AABruce" + "." + bot.version.major + "." + bot.version.minor + "/" + global.PLATFORM_CONFIG.codeName + "." + global.PLATFORM_CONFIG.version.major + "." + global.PLATFORM_CONFIG.version.minor + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; let filePath = filePathRoot + "/Output/" + VOLUMES_FOLDER_NAME + '/' + VOLUMES_ONE_MIN + '/' + dateForPath; + filePath += '/' + fileName - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> fileName = " + fileName); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> filePath = " + filePath); } - - bruceStorage.getTextFile(filePath, fileName, onFileReceived, true); + fileStorage.getTextFile(bot.devTeam, filePath, onFileReceived, true); console.log("[INFO] start -> buildCandles -> periodsLoop -> loopBody -> nextVolumeFile -> getting file at dateForPath = " + dateForPath); @@ -809,11 +779,9 @@ let fileName = '' + market.assetA + '_' + market.assetB + '.json'; let filePath = bot.filePathRoot + "/Output/" + CANDLES_FOLDER_NAME + "/" + bot.process + "/" + timePeriod; - - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeCandles -> fileName = " + fileName); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeCandles -> filePath = " + filePath); } + filePath += '/' + fileName - oliviaStorage.createTextFile(filePath, fileName, fileContent + '\n', onFileCreated); + fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); console.log("[INFO] start -> writeFiles -> writeCandles -> creating file at filePath = " + filePath); @@ -861,11 +829,9 @@ let fileName = '' + market.assetA + '_' + market.assetB + '.json'; let filePath = bot.filePathRoot + "/Output/" + VOLUMES_FOLDER_NAME + "/" + bot.process + "/" + timePeriod; + filePath += '/' + fileName - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeVolumes -> fileName = " + fileName); } - if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFiles -> writeVolumes -> filePath = " + filePath); } - - oliviaStorage.createTextFile(filePath, fileName, fileContent + '\n', onFileCreated); + fileStorage.createTextFile(bot.devTeam, filePath, fileContent + '\n', onFileCreated); console.log("[INFO] start -> writeFiles -> writeVolumes -> creating file at filePath = " + filePath); @@ -888,7 +854,7 @@ callBack(); } } - } + } catch (err) { logger.write(MODULE_NAME, "[ERROR] start -> writeFiles -> err = " + err.message); callBackFunction(global.DEFAULT_FAIL_RESPONSE); From 5cae6cbd27d3a8b2ca94ecaa49790db4147f1bd4 Mon Sep 17 00:00:00 2001 From: Matias Date: Sat, 22 Jun 2019 12:25:34 -0300 Subject: [PATCH 8/8] Platform name refactoring --- Multi-Period-Daily/User.bot.js | 4 ++-- Multi-Period-Market/User.bot.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Multi-Period-Daily/User.bot.js b/Multi-Period-Daily/User.bot.js index 2e915a8bf..9616b1a36 100644 --- a/Multi-Period-Daily/User.bot.js +++ b/Multi-Period-Daily/User.bot.js @@ -287,7 +287,7 @@ Read the candles and volumes from Bruce and produce a file for each day and for let dateForPath = contextVariables.lastCandleFile.getUTCFullYear() + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCMonth() + 1, 2) + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCDate(), 2); let fileName = market.assetA + '_' + market.assetB + ".json" - let filePathRoot = bot.devTeam + "/" + "AABruce" + "." + bot.version.major + "." + bot.version.minor + "/" + global.PLATFORM_CONFIG.codeName + "." + global.PLATFORM_CONFIG.version.major + "." + global.PLATFORM_CONFIG.version.minor + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; + let filePathRoot = bot.devTeam + "/" + "AABruce" + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; let filePath = filePathRoot + "/Output/" + CANDLES_FOLDER_NAME + '/' + CANDLES_ONE_MIN + '/' + dateForPath; filePath += '/' + fileName @@ -413,7 +413,7 @@ Read the candles and volumes from Bruce and produce a file for each day and for let dateForPath = contextVariables.lastCandleFile.getUTCFullYear() + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCMonth() + 1, 2) + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCDate(), 2); let fileName = market.assetA + '_' + market.assetB + ".json" - let filePathRoot = bot.devTeam + "/" + "AABruce" + "." + bot.version.major + "." + bot.version.minor + "/" + global.PLATFORM_CONFIG.codeName + "." + global.PLATFORM_CONFIG.version.major + "." + global.PLATFORM_CONFIG.version.minor + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; + let filePathRoot = bot.devTeam + "/" + "AABruce" + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; let filePath = filePathRoot + "/Output/" + VOLUMES_FOLDER_NAME + '/' + VOLUMES_ONE_MIN + '/' + dateForPath; filePath += '/' + fileName diff --git a/Multi-Period-Market/User.bot.js b/Multi-Period-Market/User.bot.js index 342ddd680..7575fd32e 100644 --- a/Multi-Period-Market/User.bot.js +++ b/Multi-Period-Market/User.bot.js @@ -500,7 +500,7 @@ let dateForPath = contextVariables.lastCandleFile.getUTCFullYear() + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCMonth() + 1, 2) + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCDate(), 2); let fileName = market.assetA + '_' + market.assetB + ".json" - let filePathRoot = bot.devTeam + "/" + "AABruce" + "." + bot.version.major + "." + bot.version.minor + "/" + global.PLATFORM_CONFIG.codeName + "." + global.PLATFORM_CONFIG.version.major + "." + global.PLATFORM_CONFIG.version.minor + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; + let filePathRoot = bot.devTeam + "/" + "AABruce" + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; let filePath = filePathRoot + "/Output/" + CANDLES_FOLDER_NAME + '/' + CANDLES_ONE_MIN + '/' + dateForPath; filePath += '/' + fileName @@ -631,7 +631,7 @@ let dateForPath = contextVariables.lastCandleFile.getUTCFullYear() + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCMonth() + 1, 2) + '/' + utilities.pad(contextVariables.lastCandleFile.getUTCDate(), 2); let fileName = market.assetA + '_' + market.assetB + ".json" - let filePathRoot = bot.devTeam + "/" + "AABruce" + "." + bot.version.major + "." + bot.version.minor + "/" + global.PLATFORM_CONFIG.codeName + "." + global.PLATFORM_CONFIG.version.major + "." + global.PLATFORM_CONFIG.version.minor + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; + let filePathRoot = bot.devTeam + "/" + "AABruce" + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + global.EXCHANGE_NAME + "/" + bot.dataSetVersion; let filePath = filePathRoot + "/Output/" + VOLUMES_FOLDER_NAME + '/' + VOLUMES_ONE_MIN + '/' + dateForPath; filePath += '/' + fileName