baseAsset and quotedAsset refactoring

This commit is contained in:
Luis Fernando Molina committed 2020-01-05 15:15:28 +01:00
1 parent da67471f0e
commit dad19f8278
10 files changed
+192 -192

No files matched your search

+62 -62
View File
@@ -144,7 +144,7 @@
let dataSet = thisObject.dataDependencies.dataSets.get(key);
let dateForPath = bot.processDatetime.getUTCFullYear() + '/' + utilities.pad(bot.processDatetime.getUTCMonth() + 1, 2) + '/' + utilities.pad(bot.processDatetime.getUTCDate(), 2);
let fileName = '' + bot.market.assetA + '_' + bot.market.assetB + '.json';
let fileName = '' + bot.market.baseAsset + '_' + bot.market.quotedAsset + '.json';
let filePath = bot.marketRateProvider.product + "/" + bot.marketRateProvider.dataSet + "/" + dateForPath;
dataSet.getTextFile(filePath, fileName, onFileReceived);
@@ -273,43 +273,43 @@
/* Calculate Profits */
if (context.executionContext.initialBalance.assetA > 0) {
if (context.executionContext.initialBalance.baseAsset > 0) {
context.executionContext.profits.assetA = (thisObject.truncDecimals(context.executionContext.balance.assetA) - thisObject.truncDecimals(context.executionContext.initialBalance.assetA)) / thisObject.truncDecimals(context.executionContext.initialBalance.assetA);
context.executionContext.profits.assetA = thisObject.truncDecimals(context.executionContext.profits.assetA);
context.executionContext.profits.baseAsset = (thisObject.truncDecimals(context.executionContext.balance.baseAsset) - thisObject.truncDecimals(context.executionContext.initialBalance.baseAsset)) / thisObject.truncDecimals(context.executionContext.initialBalance.baseAsset);
context.executionContext.profits.baseAsset = thisObject.truncDecimals(context.executionContext.profits.baseAsset);
}
if (context.executionContext.initialBalance.assetB > 0) {
if (context.executionContext.initialBalance.quotedAsset > 0) {
context.executionContext.profits.assetB = (thisObject.truncDecimals(context.executionContext.balance.assetB) - thisObject.truncDecimals(context.executionContext.initialBalance.assetB)) / thisObject.truncDecimals(context.executionContext.initialBalance.assetB);
context.executionContext.profits.assetB = thisObject.truncDecimals(context.executionContext.profits.assetB);
context.executionContext.profits.quotedAsset = (thisObject.truncDecimals(context.executionContext.balance.quotedAsset) - thisObject.truncDecimals(context.executionContext.initialBalance.quotedAsset)) / thisObject.truncDecimals(context.executionContext.initialBalance.quotedAsset);
context.executionContext.profits.quotedAsset = thisObject.truncDecimals(context.executionContext.profits.quotedAsset);
}
context.newHistoryRecord.profitsAssetA = context.executionContext.profits.assetA;
context.newHistoryRecord.profitsAssetB = context.executionContext.profits.assetB;
context.newHistoryRecord.profitsBaseAsset = context.executionContext.profits.baseAsset;
context.newHistoryRecord.profitsQuotedAsset = context.executionContext.profits.quotedAsset;
/* Calculate Combined Profits */
if (context.executionContext.initialBalance.assetA > 0) {
if (context.executionContext.initialBalance.baseAsset > 0) {
let convertedAssetsB = (thisObject.truncDecimals(context.executionContext.balance.assetB) - thisObject.truncDecimals(context.executionContext.initialBalance.assetB)) * marketRate;
let convertedAssetsB = (thisObject.truncDecimals(context.executionContext.balance.quotedAsset) - thisObject.truncDecimals(context.executionContext.initialBalance.quotedAsset)) * marketRate;
convertedAssetsB = thisObject.truncDecimals(convertedAssetsB);
context.executionContext.combinedProfits.assetA = (thisObject.truncDecimals(context.executionContext.balance.assetA) + convertedAssetsB - thisObject.truncDecimals(context.executionContext.initialBalance.assetA)) / thisObject.truncDecimals(context.executionContext.initialBalance.assetA) * 100;
context.executionContext.combinedProfits.assetA = thisObject.truncDecimals(context.executionContext.combinedProfits.assetA);
context.executionContext.combinedProfits.baseAsset = (thisObject.truncDecimals(context.executionContext.balance.baseAsset) + convertedAssetsB - thisObject.truncDecimals(context.executionContext.initialBalance.baseAsset)) / thisObject.truncDecimals(context.executionContext.initialBalance.baseAsset) * 100;
context.executionContext.combinedProfits.baseAsset = thisObject.truncDecimals(context.executionContext.combinedProfits.baseAsset);
}
if (context.executionContext.initialBalance.assetB > 0) {
if (context.executionContext.initialBalance.quotedAsset > 0) {
let convertedAssetsA = (thisObject.truncDecimals(context.executionContext.balance.assetA) - thisObject.truncDecimals(context.executionContext.initialBalance.assetA)) / marketRate;
let convertedAssetsA = (thisObject.truncDecimals(context.executionContext.balance.baseAsset) - thisObject.truncDecimals(context.executionContext.initialBalance.baseAsset)) / marketRate;
convertedAssetsA = thisObject.truncDecimals(convertedAssetsA);
context.executionContext.combinedProfits.assetB = (thisObject.truncDecimals(context.executionContext.balance.assetB) + convertedAssetsA - thisObject.truncDecimals(context.executionContext.initialBalance.assetB)) / thisObject.truncDecimals(context.executionContext.initialBalance.assetB) * 100;
context.executionContext.combinedProfits.assetB = thisObject.truncDecimals(context.executionContext.combinedProfits.assetB);
context.executionContext.combinedProfits.quotedAsset = (thisObject.truncDecimals(context.executionContext.balance.quotedAsset) + convertedAssetsA - thisObject.truncDecimals(context.executionContext.initialBalance.quotedAsset)) / thisObject.truncDecimals(context.executionContext.initialBalance.quotedAsset) * 100;
context.executionContext.combinedProfits.quotedAsset = thisObject.truncDecimals(context.executionContext.combinedProfits.quotedAsset);
}
context.newHistoryRecord.combinedProfitsA = context.executionContext.combinedProfits.assetA;
context.newHistoryRecord.combinedProfitsB = context.executionContext.combinedProfits.assetB;
context.newHistoryRecord.combinedProfitsA = context.executionContext.combinedProfits.baseAsset;
context.newHistoryRecord.combinedProfitsB = context.executionContext.combinedProfits.quotedAsset;
callBackFunction(global.DEFAULT_OK_RESPONSE);
@@ -652,23 +652,23 @@
*/
let sumAssetA = 0;
let sumAssetB = 0;
let sumBaseAsset = 0;
let sumQuotedAsset = 0;
let sumRate = 0;
for (let k = 0; k < pTrades.length; k++) {
let trade = pTrades[k];
sumAssetA = sumAssetA + thisObject.truncDecimals(trade.amountA);
sumAssetB = sumAssetB + thisObject.truncDecimals(trade.amountB);
sumBaseAsset = sumBaseAsset + thisObject.truncDecimals(trade.amountA);
sumQuotedAsset = sumQuotedAsset + thisObject.truncDecimals(trade.amountB);
sumRate = sumRate + thisObject.truncDecimals(trade.rate);
}
sumAssetA = thisObject.truncDecimals(sumAssetA);
sumAssetB = thisObject.truncDecimals(sumAssetB);
sumBaseAsset = thisObject.truncDecimals(sumBaseAsset);
sumQuotedAsset = thisObject.truncDecimals(sumQuotedAsset);
if (position.amountB !== sumAssetB) {
if (position.amountB !== sumQuotedAsset) {
logger.write(MODULE_NAME, "[INFO] ordersExecutionCheck -> loopBody -> position.amountB = " + position.amountB);
logger.write(MODULE_NAME, "[INFO] ordersExecutionCheck -> loopBody -> sumAssetB = " + sumAssetB);
logger.write(MODULE_NAME, "[INFO] ordersExecutionCheck -> loopBody -> sumQuotedAsset = " + sumQuotedAsset);
logger.write(MODULE_NAME, "[INFO] ordersExecutionCheck -> loopBody -> confirmOrderWasExecuted -> Cannot be confirmed that the order was executed. It must be manually cancelled by the user or cancelled by the exchange itself.");
logger.write(MODULE_NAME, "[HINT] ordersExecutionCheck -> loopBody -> confirmOrderWasExecuted -> If the process was abruptally cancelled and then restarted, it is possible that now is not sincronized with the exchange.");
@@ -724,22 +724,22 @@
*/
let sumAssetA = 0;
let sumAssetB = 0;
let sumBaseAsset = 0;
let sumQuotedAsset = 0;
for (let k = 0; k < pTrades.length; k++) {
let trade = pTrades[k];
sumAssetA = sumAssetA + thisObject.truncDecimals(trade.amountA);
sumAssetB = sumAssetB + thisObject.truncDecimals(trade.amountB);
sumBaseAsset = sumBaseAsset + thisObject.truncDecimals(trade.amountA);
sumQuotedAsset = sumQuotedAsset + thisObject.truncDecimals(trade.amountB);
}
/* To this we add the current position amounts. */
sumAssetA = sumAssetA + thisObject.truncDecimals(exchangePosition.amountA);
sumAssetB = sumAssetB + thisObject.truncDecimals(exchangePosition.amountB);
sumBaseAsset = sumBaseAsset + thisObject.truncDecimals(exchangePosition.amountA);
sumQuotedAsset = sumQuotedAsset + thisObject.truncDecimals(exchangePosition.amountB);
sumAssetA = thisObject.truncDecimals(sumAssetA);
sumAssetB = thisObject.truncDecimals(sumAssetB);
sumBaseAsset = thisObject.truncDecimals(sumBaseAsset);
sumQuotedAsset = thisObject.truncDecimals(sumQuotedAsset);
/*
* Next let's get the max decimal positions for the pair being trade returned by the exchange and validate that at least
@@ -753,12 +753,12 @@
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) {
if (Math.abs(position.amountA - sumBaseAsset) > exchangePrecision || Math.abs(position.amountB - sumQuotedAsset) > exchangePrecision) {
logger.write(MODULE_NAME, "[INFO] ordersExecutionCheck -> loopBody -> confirmOrderWasPartiallyExecuted -> position.amountA = " + position.amountA);
logger.write(MODULE_NAME, "[INFO] ordersExecutionCheck -> loopBody -> confirmOrderWasPartiallyExecuted -> sumAssetA = " + sumAssetA);
logger.write(MODULE_NAME, "[INFO] ordersExecutionCheck -> loopBody -> confirmOrderWasPartiallyExecuted -> sumBaseAsset = " + sumBaseAsset);
logger.write(MODULE_NAME, "[INFO] ordersExecutionCheck -> loopBody -> confirmOrderWasPartiallyExecuted -> position.amountB = " + position.amountB);
logger.write(MODULE_NAME, "[INFO] ordersExecutionCheck -> loopBody -> confirmOrderWasPartiallyExecuted -> sumAssetB = " + sumAssetB);
logger.write(MODULE_NAME, "[INFO] ordersExecutionCheck -> loopBody -> confirmOrderWasPartiallyExecuted -> sumQuotedAsset = " + sumQuotedAsset);
logger.write(MODULE_NAME, "[ERROR] ordersExecutionCheck -> loopBody -> confirmOrderWasPartiallyExecuted -> Cannot confirm that a partial execution was done well.");
@@ -815,8 +815,8 @@
/* Calculate Balances */
let assetA = 0;
let assetB = 0;
let baseAsset = 0;
let quotedAsset = 0;
if (trade.type === 'buy') {
@@ -829,13 +829,13 @@
let feeAmount = thisObject.truncDecimals(Number(trade.fee) * Number(trade.amountB));
assetA = Number(trade.amountA);
assetB = Number(trade.amountB) - feeAmount;
baseAsset = Number(trade.amountA);
quotedAsset = Number(trade.amountB) - feeAmount;
context.executionContext.balance.assetA = thisObject.truncDecimals(context.executionContext.balance.assetA - assetA);
context.executionContext.balance.assetB = thisObject.truncDecimals(context.executionContext.balance.assetB + assetB);
context.executionContext.balance.baseAsset = thisObject.truncDecimals(context.executionContext.balance.baseAsset - baseAsset);
context.executionContext.balance.quotedAsset = thisObject.truncDecimals(context.executionContext.balance.quotedAsset + quotedAsset);
context.executionContext.availableBalance.assetB = thisObject.truncDecimals(context.executionContext.availableBalance.assetB + assetB);
context.executionContext.availableBalance.quotedAsset = thisObject.truncDecimals(context.executionContext.availableBalance.quotedAsset + quotedAsset);
/* Not the available balance for asset A is not affected since it was already reduced when the order was placed. */
@@ -852,13 +852,13 @@
let feeAmount = thisObject.truncDecimals(Number(trade.fee) * Number(trade.amountA));
assetA = Number(trade.amountA) - feeAmount;
assetB = Number(trade.amountB);
baseAsset = Number(trade.amountA) - feeAmount;
quotedAsset = Number(trade.amountB);
context.executionContext.balance.assetA = thisObject.truncDecimals(context.executionContext.balance.assetA + assetA);
context.executionContext.balance.assetB = thisObject.truncDecimals(context.executionContext.balance.assetB - assetB);
context.executionContext.balance.baseAsset = thisObject.truncDecimals(context.executionContext.balance.baseAsset + baseAsset);
context.executionContext.balance.quotedAsset = thisObject.truncDecimals(context.executionContext.balance.quotedAsset - quotedAsset);
context.executionContext.availableBalance.assetA = thisObject.truncDecimals(context.executionContext.availableBalance.assetA + assetA);
context.executionContext.availableBalance.baseAsset = thisObject.truncDecimals(context.executionContext.availableBalance.baseAsset + baseAsset);
/* Not the available balance for asset B is not affected since it was already reduced when the order was placed. */
@@ -937,11 +937,11 @@
if (pType === 'buy') {
if (pAmountA > thisObject.truncDecimals(context.executionContext.availableBalance.assetA)) {
if (pAmountA > thisObject.truncDecimals(context.executionContext.availableBalance.baseAsset)) {
logger.write(MODULE_NAME, "[ERROR] putPosition -> Input Validations -> pAmountA is grater than the Available Balance.");
logger.write(MODULE_NAME, "[ERROR] putPosition -> Input Validations -> pAmountA = " + pAmountA);
logger.write(MODULE_NAME, "[ERROR] putPosition -> Input Validations -> Available Balance = " + thisObject.truncDecimals(context.executionContext.availableBalance.assetA));
logger.write(MODULE_NAME, "[ERROR] putPosition -> Input Validations -> Available Balance = " + thisObject.truncDecimals(context.executionContext.availableBalance.baseAsset));
let err = {
result: global.DEFAULT_FAIL_RESPONSE.result,
@@ -955,11 +955,11 @@
if (pType === 'sell') {
if (pAmountB > thisObject.truncDecimals(context.executionContext.availableBalance.assetB)) {
if (pAmountB > thisObject.truncDecimals(context.executionContext.availableBalance.quotedAsset)) {
logger.write(MODULE_NAME, "[ERROR] putPosition -> Input Validations -> pAmountB is grater than the Available Balance.");
logger.write(MODULE_NAME, "[ERROR] putPosition -> Input Validations -> pAmountB = " + pAmountB);
logger.write(MODULE_NAME, "[ERROR] putPosition -> Input Validations -> Available Balance = " + thisObject.truncDecimals(context.executionContext.availableBalance.assetB));
logger.write(MODULE_NAME, "[ERROR] putPosition -> Input Validations -> Available Balance = " + thisObject.truncDecimals(context.executionContext.availableBalance.quotedAsset));
let err = {
result: global.DEFAULT_FAIL_RESPONSE.result,
@@ -1048,13 +1048,13 @@
if (position.type === 'buy') {
context.executionContext.availableBalance.assetA = thisObject.truncDecimals(context.executionContext.availableBalance.assetA - pAmountA);
context.executionContext.availableBalance.baseAsset = thisObject.truncDecimals(context.executionContext.availableBalance.baseAsset - pAmountA);
context.newHistoryRecord.lastBuyRate = pRate;
}
if (position.type === 'sell') {
context.executionContext.availableBalance.assetB = thisObject.truncDecimals(context.executionContext.availableBalance.assetB - pAmountB);
context.executionContext.availableBalance.quotedAsset = thisObject.truncDecimals(context.executionContext.availableBalance.quotedAsset - pAmountB);
context.newHistoryRecord.lastSellRate = pRate;
}
@@ -1210,11 +1210,11 @@
}
}
function getPublicTradeHistory(assetA, assetB, startTime, endTime, callback) {
function getPublicTradeHistory(baseAsset, quotedAsset, startTime, endTime, callback) {
if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] getTradeHistory -> Entering function."); }
exchangeAPI.getPublicTradeHistory(assetA, assetB, startTime, endTime, callback);
exchangeAPI.getPublicTradeHistory(baseAsset, quotedAsset, startTime, endTime, callback);
}
function recalculateRateAverages() {
@@ -1296,8 +1296,8 @@
if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] getCombinedProfits -> Entering function."); }
let combinedProfits = {
assetA: context.newHistoryRecord.combinedProfitsA,
assetB: context.newHistoryRecord.combinedProfitsB
baseAsset: context.newHistoryRecord.combinedProfitsA,
quotedAsset: context.newHistoryRecord.combinedProfitsB
}
if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] getCombinedProfits -> JSON.stringify(combinedProfits) = " + JSON.stringify(combinedProfits)); }
@@ -1310,8 +1310,8 @@
if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] getROI -> Entering function."); }
let ROI = {
assetA: (context.executionContext.balance.assetA - context.executionContext.initialBalance.assetA) / context.executionContext.initialBalance.assetA * 100,
assetB: (context.executionContext.balance.assetB - context.executionContext.initialBalance.assetB) / context.executionContext.initialBalance.assetB * 100
baseAsset: (context.executionContext.balance.baseAsset - context.executionContext.initialBalance.baseAsset) / context.executionContext.initialBalance.baseAsset * 100,
quotedAsset: (context.executionContext.balance.quotedAsset - context.executionContext.initialBalance.quotedAsset) / context.executionContext.initialBalance.quotedAsset * 100
}
if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] getROI -> JSON.stringify(ROI) = " + JSON.stringify(ROI)); }
+2 -2
View File
@@ -469,7 +469,7 @@
if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> writeFile -> Entering function."); }
let market = bot.market;
let fileName = '' + market.assetA + '_' + market.assetB + '.json';
let fileName = '' + market.baseAsset + '_' + market.quotedAsset + '.json';
let dateForPath = ''
if (processingDailyFiles === true) {
@@ -493,7 +493,7 @@
logger.write(MODULE_NAME, "[ERROR] start -> writeFile -> onFileCreated -> err = " + err.stack);
logger.write(MODULE_NAME, "[ERROR] start -> writeFile -> onFileCreated -> filePath = " + filePath);
logger.write(MODULE_NAME, "[ERROR] start -> writeFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB);
logger.write(MODULE_NAME, "[ERROR] start -> writeFile -> onFileCreated -> market = " + market.baseAsset + "_" + market.quotedAsset);
callBackFunction(err);
return;
+18 -18
View File
@@ -36,8 +36,8 @@
newPositions: 0,
newTrades: 0,
movedPositions: 0,
profitsAssetA: 0,
profitsAssetB: 0,
profitsBaseAsset: 0,
profitsQuotedAsset: 0,
combinedProfitsA: 0,
combinedProfitsB: 0,
messageRelevance: 0,
@@ -250,11 +250,11 @@
/* Update the new History Record, in case there are no trades during this execution that updates it. */
thisObject.newHistoryRecord.profitsAssetA = thisObject.executionContext.profits.assetA;
thisObject.newHistoryRecord.profitsAssetB = thisObject.executionContext.profits.assetB;
thisObject.newHistoryRecord.profitsBaseAsset = thisObject.executionContext.profits.baseAsset;
thisObject.newHistoryRecord.profitsQuotedAsset = thisObject.executionContext.profits.quotedAsset;
thisObject.newHistoryRecord.combinedProfitsA = thisObject.executionContext.combinedProfits.assetA;
thisObject.newHistoryRecord.combinedProfitsB = thisObject.executionContext.combinedProfits.assetB;
thisObject.newHistoryRecord.combinedProfitsA = thisObject.executionContext.combinedProfits.baseAsset;
thisObject.newHistoryRecord.combinedProfitsB = thisObject.executionContext.combinedProfits.quotedAsset;
callBack(global.DEFAULT_OK_RESPONSE);
@@ -315,24 +315,24 @@
thisObject.executionContext = {
initialBalance: { // This is used to calculate profits.
assetA: INITIAL_BALANCE_A,
assetB: INITIAL_BALANCE_B
baseAsset: INITIAL_BALANCE_A,
quotedAsset: INITIAL_BALANCE_B
},
balance: { // This is the total balance that includes positions at the order book + funds available to be traded.
assetA: INITIAL_BALANCE_A,
assetB: INITIAL_BALANCE_B // It starts with the initial initialBalance.
baseAsset: INITIAL_BALANCE_A,
quotedAsset: INITIAL_BALANCE_B // It starts with the initial initialBalance.
},
availableBalance: { // This is the balance the bot has at any moment in time available to be traded (not in positions at the order book).
assetA: INITIAL_BALANCE_A,
assetB: INITIAL_BALANCE_B // It starts with the initial initialBalance.
baseAsset: INITIAL_BALANCE_A,
quotedAsset: INITIAL_BALANCE_B // It starts with the initial initialBalance.
},
profits: {
assetA: 0,
assetB: 0
baseAsset: 0,
quotedAsset: 0
},
combinedProfits: {
assetA: 0,
assetB: 0
baseAsset: 0,
quotedAsset: 0
},
positions: [],
transactions: []
@@ -457,8 +457,8 @@
thisObject.newHistoryRecord.newPositions,
thisObject.newHistoryRecord.newTrades,
thisObject.newHistoryRecord.movedPositions,
thisObject.newHistoryRecord.profitsAssetA,
thisObject.newHistoryRecord.profitsAssetB,
thisObject.newHistoryRecord.profitsBaseAsset,
thisObject.newHistoryRecord.profitsQuotedAsset,
thisObject.newHistoryRecord.combinedProfitsA,
thisObject.newHistoryRecord.combinedProfitsB,
+4 -4
View File
@@ -312,7 +312,7 @@
if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> processTimeFramesMarketFiles -> periodsLoopBody -> dependencyLoopBody -> getFile -> Entering function."); }
let fileName = market.assetA + '_' + market.assetB + ".json";
let fileName = market.baseAsset + '_' + market.quotedAsset + ".json";
if (dependency.dataSet !== "Multi-Period-Market") {
@@ -638,7 +638,7 @@
} else {
filePath = dependency.product + '/' + dependency.dataSet + "/" + dateForPath;
}
let fileName = market.assetA + '_' + market.assetB + ".json";
let fileName = market.baseAsset + '_' + market.quotedAsset + ".json";
dataset.getTextFile(filePath, fileName, onFileReceived);
@@ -714,7 +714,7 @@
} else {
filePath = dependency.product + '/' + dependency.dataSet + "/" + dateForPath;
}
let fileName = market.assetA + '_' + market.assetB + ".json";
let fileName = market.baseAsset + '_' + market.quotedAsset + ".json";
dataset.getTextFile(filePath, fileName, onFileReceived);
@@ -992,7 +992,7 @@
let fileContent = JSON.stringify(dataRange);
let fileName = '/Data.Range.' + market.assetA + '_' + market.assetB + '.json';
let fileName = '/Data.Range.' + market.baseAsset + '_' + market.quotedAsset + '.json';
let filePath = bot.filePathRoot + "/Output/" + bot.SESSION.folderName + "/" + productCodeName + "/" + 'Multi-Period-Daily' + fileName;
fileStorage.createTextFile(bot.dataMine, filePath, fileContent + '\n', onFileCreated);
+3 -3
View File
@@ -422,7 +422,7 @@
} else {
filePath = dependency.product + '/' + dependency.dataSet + "/" + dateForPath;
}
let fileName = market.assetA + '_' + market.assetB + ".json";
let fileName = market.baseAsset + '_' + market.quotedAsset + ".json";
dataset.getTextFile(filePath, fileName, onFileReceived);
@@ -492,7 +492,7 @@
} else {
filePath = dependency.product + '/' + dependency.dataSet + "/" + dateForPath;
}
let fileName = market.assetA + '_' + market.assetB + ".json";
let fileName = market.baseAsset + '_' + market.quotedAsset + ".json";
dataset.getTextFile(filePath, fileName, onFileReceived);
@@ -726,7 +726,7 @@
let fileContent = JSON.stringify(dataRange);
let fileName = '/Data.Range.' + market.assetA + '_' + market.assetB + '.json';
let fileName = '/Data.Range.' + market.baseAsset + '_' + market.quotedAsset + '.json';
let filePath = bot.filePathRoot + "/Output/" + productCodeName + "/" + bot.process + fileName;
fileStorage.createTextFile(bot.dataMine, filePath, fileContent + '\n', onFileCreated);
+1 -1
View File
@@ -173,7 +173,7 @@
if (FULL_LOG === true) { logger.write(MODULE_NAME, "[INFO] start -> processTimeFrames -> periodsLoopBody -> dependencyLoopBody -> getFile -> Entering function."); }
let dateForPath = bot.processDatetime.getUTCFullYear() + '/' + utilities.pad(bot.processDatetime.getUTCMonth() + 1, 2) + '/' + utilities.pad(bot.processDatetime.getUTCDate(), 2);
let fileName = market.assetA + '_' + market.assetB + ".json";
let fileName = market.baseAsset + '_' + market.quotedAsset + ".json";
let filePath
if (dependency.dataSet === "Multi-Period-Market") {
+2 -2
View File
@@ -210,8 +210,8 @@
botConfig.dataMine = global.TASK_NODE.bot.processes[processIndex].referenceParent.parentNode.parentNode.code.codeName
botConfig.exchange = global.TASK_NODE.bot.processes[processIndex].marketInstance.referenceParent.parentNode.parentNode.code.codeName
botConfig.market = {
assetA: global.TASK_NODE.bot.processes[processIndex].marketInstance.referenceParent.baseAsset.referenceParent.code.codeName,
assetB: global.TASK_NODE.bot.processes[processIndex].marketInstance.referenceParent.quotedAsset.referenceParent.code.codeName
baseAsset: global.TASK_NODE.bot.processes[processIndex].marketInstance.referenceParent.baseAsset.referenceParent.code.codeName,
quotedAsset: global.TASK_NODE.bot.processes[processIndex].marketInstance.referenceParent.quotedAsset.referenceParent.code.codeName
}
/* This stuff is still hardcoded and unresolved. */
+2 -2
View File
@@ -148,7 +148,7 @@
if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] load -> Entering function."); }
let fileName = "Status.Report." + bot.market.assetA + '_' + bot.market.assetB + ".json";
let fileName = "Status.Report." + bot.market.baseAsset + '_' + bot.market.quotedAsset + ".json";
let filePath;
let ownerId = statusDependencyNode.dataMine + "-" + statusDependencyNode.bot + "-" + statusDependencyNode.botVersion.major + "-" + statusDependencyNode.botVersion.minor + "-" + statusDependencyNode.process + "-" + statusDependencyNode.dataSetVersion;
@@ -245,7 +245,7 @@
return;
}
let fileName = "Status.Report." + bot.market.assetA + '_' + bot.market.assetB + ".json";
let fileName = "Status.Report." + bot.market.baseAsset + '_' + bot.market.quotedAsset + ".json";
let filePath = bot.filePathRoot + "/Reports/" + sessionPath + statusDependencyNode.process + timePath;
filePath += '/' + fileName
+18 -18
View File
@@ -219,7 +219,7 @@
fileContent = "[" + fileContent + "]";
let fileName = '' + market.assetA + '_' + market.assetB + '.json';
let fileName = '' + market.baseAsset + '_' + market.quotedAsset + '.json';
let filePathRoot = bot.dataMine + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + bot.exchange + "/" + bot.dataSetVersion;
let filePath = filePathRoot + "/Output/" + bot.SESSION.folderName + "/" + SIMULATED_RECORDS_FOLDER_NAME + "/" + "Multi-Period-Market" + "/" + timeFrameLabel;
@@ -238,7 +238,7 @@
logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeRecordsFile -> onFileCreated -> err = " + err.stack);
logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeRecordsFile -> onFileCreated -> filePath = " + filePath);
logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeRecordsFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB);
logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeRecordsFile -> onFileCreated -> market = " + market.baseAsset + "_" + market.quotedAsset);
callBackFunction(err);
return;
@@ -297,7 +297,7 @@
fileContent = "[" + fileContent + "]";
fileContent = "[" + JSON.stringify(tradingSystem) + "," + fileContent + "]";
let fileName = '' + market.assetA + '_' + market.assetB + '.json';
let fileName = '' + market.baseAsset + '_' + market.quotedAsset + '.json';
let filePathRoot = bot.dataMine + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + bot.exchange + "/" + bot.dataSetVersion;
let filePath = filePathRoot + "/Output/" + bot.SESSION.folderName + "/" + CONDITIONS_FOLDER_NAME + "/" + "Multi-Period-Market" + "/" + timeFrameLabel;
@@ -316,7 +316,7 @@
logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeConditionsFile -> onFileCreated -> err = " + err.stack);
logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeConditionsFile -> onFileCreated -> filePath = " + filePath);
logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeConditionsFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB);
logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeConditionsFile -> onFileCreated -> market = " + market.baseAsset + "_" + market.quotedAsset);
callBackFunction(err);
return;
@@ -367,7 +367,7 @@
}
fileContent = "[" + fileContent + "]";
let fileName = '' + market.assetA + '_' + market.assetB + '.json';
let fileName = '' + market.baseAsset + '_' + market.quotedAsset + '.json';
let filePathRoot = bot.dataMine + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + bot.exchange + "/" + bot.dataSetVersion;
let filePath = filePathRoot + "/Output/" + bot.SESSION.folderName + "/" + STRATEGIES_FOLDER_NAME + "/" + "Multi-Period-Market" + "/" + timeFrameLabel;
@@ -386,7 +386,7 @@
logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeStrategiesFile -> onFileCreated -> err = " + err.stack);
logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeStrategiesFile -> onFileCreated -> filePath = " + filePath);
logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeStrategiesFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB);
logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeStrategiesFile -> onFileCreated -> market = " + market.baseAsset + "_" + market.quotedAsset);
callBackFunction(err);
return;
@@ -440,7 +440,7 @@
}
fileContent = "[" + fileContent + "]";
let fileName = '' + market.assetA + '_' + market.assetB + '.json';
let fileName = '' + market.baseAsset + '_' + market.quotedAsset + '.json';
let filePathRoot = bot.dataMine + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + bot.exchange + "/" + bot.dataSetVersion;
let filePath = filePathRoot + "/Output/" + bot.SESSION.folderName + "/" + TRADES_FOLDER_NAME + "/" + "Multi-Period-Market" + "/" + timeFrameLabel;
@@ -459,7 +459,7 @@
logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeTradesFile -> onFileCreated -> err = " + err.stack);
logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeTradesFile -> onFileCreated -> filePath = " + filePath);
logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeTradesFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB);
logger.write(MODULE_NAME, "[ERROR] start -> writeMarketFiles -> writeTradesFile -> onFileCreated -> market = " + market.baseAsset + "_" + market.quotedAsset);
callBackFunction(err);
return;
@@ -566,7 +566,7 @@
fileContent = "[" + fileContent + "]";
let fileName = '' + market.assetA + '_' + market.assetB + '.json';
let fileName = '' + market.baseAsset + '_' + market.quotedAsset + '.json';
let filePathRoot = bot.dataMine + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + bot.exchange + "/" + bot.dataSetVersion;
let filePath = filePathRoot + "/Output/" + bot.SESSION.folderName + "/" + SIMULATED_RECORDS_FOLDER_NAME + "/" + "Multi-Period-Daily" + "/" + timeFrameLabel;
@@ -585,7 +585,7 @@
logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeFinalResults -> onFileCreated -> err = " + err.stack);
logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeFinalResults -> onFileCreated -> filePath = " + filePath);
logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeFinalResults -> onFileCreated -> market = " + market.assetA + "_" + market.assetB);
logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeFinalResults -> onFileCreated -> market = " + market.baseAsset + "_" + market.quotedAsset);
callBackFunction(err);
return;
@@ -673,7 +673,7 @@
fileContent = "[" + fileContent + "]";
let dateForPath = currentDay.getUTCFullYear() + '/' + utilities.pad(currentDay.getUTCMonth() + 1, 2) + '/' + utilities.pad(currentDay.getUTCDate(), 2);
let fileName = '' + market.assetA + '_' + market.assetB + '.json';
let fileName = '' + market.baseAsset + '_' + market.quotedAsset + '.json';
let filePathRoot = bot.dataMine + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + bot.exchange + "/" + bot.dataSetVersion;
let filePath = filePathRoot + "/Output/" + bot.SESSION.folderName + "/" + SIMULATED_RECORDS_FOLDER_NAME + "/" + "Multi-Period-Daily" + "/" + timeFrameLabel + "/" + dateForPath;
@@ -692,7 +692,7 @@
logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeRecordsFile -> onFileCreated -> err = " + err.stack);
logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeRecordsFile -> onFileCreated -> filePath = " + filePath);
logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeRecordsFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB);
logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeRecordsFile -> onFileCreated -> market = " + market.baseAsset + "_" + market.quotedAsset);
callBackFunction(err);
return;
@@ -761,7 +761,7 @@
fileContent = "[" + JSON.stringify(tradingSystem) + "," + fileContent + "]";
let dateForPath = currentDay.getUTCFullYear() + '/' + utilities.pad(currentDay.getUTCMonth() + 1, 2) + '/' + utilities.pad(currentDay.getUTCDate(), 2);
let fileName = '' + market.assetA + '_' + market.assetB + '.json';
let fileName = '' + market.baseAsset + '_' + market.quotedAsset + '.json';
let filePathRoot = bot.dataMine + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + bot.exchange + "/" + bot.dataSetVersion;
let filePath = filePathRoot + "/Output/" + bot.SESSION.folderName + "/" + CONDITIONS_FOLDER_NAME + "/" + "Multi-Period-Daily" + "/" + timeFrameLabel + "/" + dateForPath;
@@ -780,7 +780,7 @@
logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeConditionsFile -> onFileCreated -> err = " + err.stack);
logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeConditionsFile -> onFileCreated -> filePath = " + filePath);
logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeConditionsFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB);
logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeConditionsFile -> onFileCreated -> market = " + market.baseAsset + "_" + market.quotedAsset);
callBackFunction(err);
return;
@@ -838,7 +838,7 @@
fileContent = "[" + fileContent + "]";
let dateForPath = currentDay.getUTCFullYear() + '/' + utilities.pad(currentDay.getUTCMonth() + 1, 2) + '/' + utilities.pad(currentDay.getUTCDate(), 2);
let fileName = '' + market.assetA + '_' + market.assetB + '.json';
let fileName = '' + market.baseAsset + '_' + market.quotedAsset + '.json';
let filePathRoot = bot.dataMine + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + bot.exchange + "/" + bot.dataSetVersion;
let filePath = filePathRoot + "/Output/" + bot.SESSION.folderName + "/" + STRATEGIES_FOLDER_NAME + "/" + "Multi-Period-Daily" + "/" + timeFrameLabel + "/" + dateForPath;
@@ -857,7 +857,7 @@
logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeStrategiesFile -> onFileCreated -> err = " + err.stack);
logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeStrategiesFile -> onFileCreated -> filePath = " + filePath);
logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeStrategiesFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB);
logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeStrategiesFile -> onFileCreated -> market = " + market.baseAsset + "_" + market.quotedAsset);
callBackFunction(err);
return;
@@ -918,7 +918,7 @@
fileContent = "[" + fileContent + "]";
let dateForPath = currentDay.getUTCFullYear() + '/' + utilities.pad(currentDay.getUTCMonth() + 1, 2) + '/' + utilities.pad(currentDay.getUTCDate(), 2);
let fileName = '' + market.assetA + '_' + market.assetB + '.json';
let fileName = '' + market.baseAsset + '_' + market.quotedAsset + '.json';
let filePathRoot = bot.dataMine + "/" + bot.codeName + "." + bot.version.major + "." + bot.version.minor + "/" + global.CLONE_EXECUTOR.codeName + "." + global.CLONE_EXECUTOR.version + "/" + bot.exchange + "/" + bot.dataSetVersion;
let filePath = filePathRoot + "/Output/" + bot.SESSION.folderName + "/" + TRADES_FOLDER_NAME + "/" + "Multi-Period-Daily" + "/" + timeFrameLabel + "/" + dateForPath;
@@ -937,7 +937,7 @@
logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeTradesFile -> onFileCreated -> err = " + err.stack);
logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeTradesFile -> onFileCreated -> filePath = " + filePath);
logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeTradesFile -> onFileCreated -> market = " + market.assetA + "_" + market.assetB);
logger.write(MODULE_NAME, "[ERROR] start -> writeDailyFiles -> writeTradesFile -> onFileCreated -> market = " + market.baseAsset + "_" + market.quotedAsset);
callBackFunction(err);
return;
+80 -80
View File
@@ -117,8 +117,8 @@
*/
/*Needed for statistics */
let previousBalanceAssetA = 0;
let previousBalanceAssetB = 0;
let previousBalanceBaseAsset = 0;
let previousBalanceQuotedAsset = 0;
/* Position Management */
let tradePositionRate = 0;
@@ -155,8 +155,8 @@
endRate: 0
}
let balanceAssetA = bot.VALUES_TO_USE.initialBalanceA;
let balanceAssetB = bot.VALUES_TO_USE.initialBalanceB;
let balanceBaseAsset = bot.VALUES_TO_USE.initialBalanceA;
let balanceQuotedAsset = bot.VALUES_TO_USE.initialBalanceB;
let lastTradeProfitLoss = 0;
let profit = 0;
@@ -189,8 +189,8 @@
yesterday.stopLoss = 0
yesterday.takeProfit = 0
yesterday.previousBalanceAssetA = previousBalanceAssetA
yesterday.previousBalanceAssetB = previousBalanceAssetB
yesterday.previousBalanceBaseAsset = previousBalanceBaseAsset
yesterday.previousBalanceQuotedAsset = previousBalanceQuotedAsset
yesterday.tradePositionRate = tradePositionRate
yesterday.tradePositionSize = tradePositionSize
@@ -223,8 +223,8 @@
endRate: 0
}
yesterday.balanceAssetA = balanceAssetA;
yesterday.balanceAssetB = balanceAssetB;
yesterday.balanceBaseAsset = balanceBaseAsset;
yesterday.balanceQuotedAsset = balanceQuotedAsset;
yesterday.lastTradeProfitLoss = 0;
yesterday.profit = 0;
@@ -257,8 +257,8 @@
interExecutionMemory.stopLoss = 0
interExecutionMemory.takeProfit = 0
interExecutionMemory.previousBalanceAssetA = previousBalanceAssetA
interExecutionMemory.previousBalanceAssetB = previousBalanceAssetB
interExecutionMemory.previousBalanceBaseAsset = previousBalanceBaseAsset
interExecutionMemory.previousBalanceQuotedAsset = previousBalanceQuotedAsset
interExecutionMemory.tradePositionRate = tradePositionRate
interExecutionMemory.tradePositionSize = tradePositionSize
@@ -291,8 +291,8 @@
endRate: 0
}
interExecutionMemory.balanceAssetA = balanceAssetA;
interExecutionMemory.balanceAssetB = balanceAssetB;
interExecutionMemory.balanceBaseAsset = balanceBaseAsset;
interExecutionMemory.balanceQuotedAsset = balanceQuotedAsset;
interExecutionMemory.lastTradeProfitLoss = lastTradeProfitLoss;
interExecutionMemory.profit = profit;
@@ -327,8 +327,8 @@
stopLoss = interExecutionMemory.stopLoss
takeProfit = interExecutionMemory.takeProfit
previousBalanceAssetA = interExecutionMemory.previousBalanceAssetA
previousBalanceAssetB = interExecutionMemory.previousBalanceAssetB
previousBalanceBaseAsset = interExecutionMemory.previousBalanceBaseAsset
previousBalanceQuotedAsset = interExecutionMemory.previousBalanceQuotedAsset
tradePositionRate = interExecutionMemory.tradePositionRate
tradePositionSize = interExecutionMemory.tradePositionSize
@@ -364,11 +364,11 @@
if (currentDay) {
if (currentDay.valueOf() >= bot.VALUES_TO_USE.timeRange.initialDatetime.valueOf() + ONE_DAY_IN_MILISECONDS) { // Only after the first day we start grabbing the balance from this memory.
balanceAssetA = interExecutionMemory.balanceAssetA;
balanceAssetB = interExecutionMemory.balanceAssetB;
balanceBaseAsset = interExecutionMemory.balanceBaseAsset;
balanceQuotedAsset = interExecutionMemory.balanceQuotedAsset;
yesterday.balanceAssetA = balanceAssetA;
yesterday.balanceAssetB = balanceAssetB;
yesterday.balanceBaseAsset = balanceBaseAsset;
yesterday.balanceQuotedAsset = balanceQuotedAsset;
}
}
@@ -400,8 +400,8 @@
yesterday.stopLoss = stopLoss
yesterday.takeProfit = takeProfit
yesterday.previousBalanceAssetA = previousBalanceAssetA
yesterday.previousBalanceAssetB = previousBalanceAssetB
yesterday.previousBalanceBaseAsset = previousBalanceBaseAsset
yesterday.previousBalanceQuotedAsset = previousBalanceQuotedAsset
yesterday.tradePositionRate = tradePositionRate
yesterday.tradePositionSize = tradePositionSize
@@ -708,10 +708,10 @@
/* Default Values*/
if (bot.VALUES_TO_USE.baseAsset === 'BTC') {
positionSize = balanceAssetA;
positionSize = balanceBaseAsset;
positionRate = candle.close;
} else {
positionSize = balanceAssetB;
positionSize = balanceQuotedAsset;
positionRate = candle.close;
}
@@ -731,15 +731,15 @@
}
if (isNaN(positionSize)) {
if (bot.VALUES_TO_USE.baseAsset === 'BTC') {
positionSize = balanceAssetA;
positionSize = balanceBaseAsset;
} else {
positionSize = balanceAssetB;
positionSize = balanceQuotedAsset;
}
} else {
if (bot.VALUES_TO_USE.baseAsset === 'BTC') {
if (positionSize > balanceAssetA) { positionSize = balanceAssetA }
if (positionSize > balanceBaseAsset) { positionSize = balanceBaseAsset }
} else {
if (positionSize > balanceAssetB) { positionSize = balanceAssetB }
if (positionSize > balanceQuotedAsset) { positionSize = balanceQuotedAsset }
}
}
}
@@ -1095,11 +1095,11 @@
let balance
if (bot.VALUES_TO_USE.baseAsset === 'BTC') {
balance = balanceAssetA
balance = balanceBaseAsset
minimumBalance = bot.VALUES_TO_USE.minimumBalanceA
maximumBalance = bot.VALUES_TO_USE.maximumBalanceA
} else {
balance = balanceAssetB
balance = balanceQuotedAsset
minimumBalance = bot.VALUES_TO_USE.minimumBalanceB
maximumBalance = bot.VALUES_TO_USE.maximumBalanceB
}
@@ -1718,27 +1718,27 @@
let feePaid = 0
if (bot.VALUES_TO_USE.baseAsset === 'BTC') {
strategy.positionSize = balanceAssetB / finalStopLoss;
strategy.positionSize = balanceQuotedAsset / finalStopLoss;
strategy.positionRate = finalStopLoss;
feePaid = balanceAssetB / finalStopLoss * bot.VALUES_TO_USE.feeStructure.taker / 100
feePaid = balanceQuotedAsset / finalStopLoss * bot.VALUES_TO_USE.feeStructure.taker / 100
balanceAssetA = balanceAssetA + balanceAssetB / finalStopLoss - feePaid;
balanceAssetB = 0;
balanceBaseAsset = balanceBaseAsset + balanceQuotedAsset / finalStopLoss - feePaid;
balanceQuotedAsset = 0;
} else {
strategy.positionSize = balanceAssetA * finalStopLoss;
strategy.positionSize = balanceBaseAsset * finalStopLoss;
strategy.positionRate = finalStopLoss;
feePaid = balanceAssetA * finalStopLoss * bot.VALUES_TO_USE.feeStructure.taker / 100
feePaid = balanceBaseAsset * finalStopLoss * bot.VALUES_TO_USE.feeStructure.taker / 100
balanceAssetB = balanceAssetB + balanceAssetA * finalStopLoss - feePaid;
balanceAssetA = 0;
balanceQuotedAsset = balanceQuotedAsset + balanceBaseAsset * finalStopLoss - feePaid;
balanceBaseAsset = 0;
}
if (processingDailyFiles) {
if (positionedAtYesterday) {
yesterday.balanceAssetA = balanceAssetA;
yesterday.balanceAssetB = balanceAssetB;
yesterday.balanceBaseAsset = balanceBaseAsset;
yesterday.balanceQuotedAsset = balanceQuotedAsset;
}
}
@@ -1814,27 +1814,27 @@
let feePaid = 0
if (bot.VALUES_TO_USE.baseAsset === 'BTC') {
strategy.positionSize = balanceAssetB / finalTakeProfit;
strategy.positionSize = balanceQuotedAsset / finalTakeProfit;
strategy.positionRate = finalTakeProfit;
feePaid = balanceAssetB / finalTakeProfit * bot.VALUES_TO_USE.feeStructure.taker / 100
feePaid = balanceQuotedAsset / finalTakeProfit * bot.VALUES_TO_USE.feeStructure.taker / 100
balanceAssetA = balanceAssetA + balanceAssetB / finalTakeProfit - feePaid;
balanceAssetB = 0;
balanceBaseAsset = balanceBaseAsset + balanceQuotedAsset / finalTakeProfit - feePaid;
balanceQuotedAsset = 0;
} else {
strategy.positionSize = balanceAssetA * finalTakeProfit;
strategy.positionSize = balanceBaseAsset * finalTakeProfit;
strategy.positionRate = finalTakeProfit;
feePaid = balanceAssetA * finalTakeProfit * bot.VALUES_TO_USE.feeStructure.taker / 100
feePaid = balanceBaseAsset * finalTakeProfit * bot.VALUES_TO_USE.feeStructure.taker / 100
balanceAssetB = balanceAssetB + balanceAssetA * finalTakeProfit - feePaid;
balanceAssetA = 0;
balanceQuotedAsset = balanceQuotedAsset + balanceBaseAsset * finalTakeProfit - feePaid;
balanceBaseAsset = 0;
}
if (processingDailyFiles) {
if (positionedAtYesterday) {
yesterday.balanceAssetA = balanceAssetA;
yesterday.balanceAssetB = balanceAssetB;
yesterday.balanceBaseAsset = balanceBaseAsset;
yesterday.balanceQuotedAsset = balanceQuotedAsset;
}
}
@@ -2041,8 +2041,8 @@
amountA = tradePositionSize * openPositionRate
amountB = tradePositionSize
if (amountB > availableBalance.assetB) { // The assistant know what fees were paid.
amountB = availableBalance.assetB
if (amountB > availableBalance.quotedAsset) { // The assistant know what fees were paid.
amountB = availableBalance.quotedAsset
}
} else {
positionDirection = "buy"
@@ -2052,8 +2052,8 @@
amountA = tradePositionSize
amountB = tradePositionSize / openPositionRate
if (amountA > availableBalance.assetA) { // The assistant know what fees were paid.
amountA = availableBalance.assetA
if (amountA > availableBalance.baseAsset) { // The assistant know what fees were paid.
amountA = availableBalance.baseAsset
}
}
@@ -2117,13 +2117,13 @@
marketRate = candle.close;
previousBalanceAssetA = balanceAssetA;
previousBalanceAssetB = balanceAssetB;
previousBalanceBaseAsset = balanceBaseAsset;
previousBalanceQuotedAsset = balanceQuotedAsset;
if (processingDailyFiles) {
if (positionedAtYesterday) {
yesterday.previousBalanceAssetA = previousBalanceAssetA;
yesterday.previousBalanceAssetB = previousBalanceAssetB;
yesterday.previousBalanceBaseAsset = previousBalanceBaseAsset;
yesterday.previousBalanceQuotedAsset = previousBalanceQuotedAsset;
}
}
@@ -2136,20 +2136,20 @@
feePaid = tradePositionSize * tradePositionRate * bot.VALUES_TO_USE.feeStructure.taker / 100
balanceAssetB = balanceAssetB + tradePositionSize * tradePositionRate - feePaid;
balanceAssetA = balanceAssetA - tradePositionSize;
balanceQuotedAsset = balanceQuotedAsset + tradePositionSize * tradePositionRate - feePaid;
balanceBaseAsset = balanceBaseAsset - tradePositionSize;
} else {
feePaid = tradePositionSize / tradePositionRate * bot.VALUES_TO_USE.feeStructure.taker / 100
balanceAssetA = balanceAssetA + tradePositionSize / tradePositionRate - feePaid;
balanceAssetB = balanceAssetB - tradePositionSize;
balanceBaseAsset = balanceBaseAsset + tradePositionSize / tradePositionRate - feePaid;
balanceQuotedAsset = balanceQuotedAsset - tradePositionSize;
}
if (processingDailyFiles) {
if (positionedAtYesterday) {
yesterday.balanceAssetA = balanceAssetA;
yesterday.balanceAssetB = balanceAssetB;
yesterday.balanceBaseAsset = balanceBaseAsset;
yesterday.balanceQuotedAsset = balanceQuotedAsset;
yesterday.lastTradeProfitLoss = lastTradeProfitLoss;
yesterday.lastTradeROI = lastTradeROI;
@@ -2262,16 +2262,16 @@
closePositionRate = ticker.last + 100; // This is provisional and totally arbitrary, until we have a formula on the designer that defines this stuff.
amountA = availableBalance.assetA
amountB = availableBalance.assetA / closePositionRate
amountA = availableBalance.baseAsset
amountB = availableBalance.baseAsset / closePositionRate
} else {
positionDirection = "sell"
closePositionRate = ticker.last - 100; // This is provisional and totally arbitrary, until we have a formula on the designer that defines this stuff.
amountA = availableBalance.assetB * closePositionRate
amountB = availableBalance.assetB
amountA = availableBalance.quotedAsset * closePositionRate
amountB = availableBalance.quotedAsset
}
@@ -2337,15 +2337,15 @@
}
if (bot.VALUES_TO_USE.baseAsset === 'BTC') {
lastTradeProfitLoss = balanceAssetA - previousBalanceAssetA;
lastTradeProfitLoss = balanceBaseAsset - previousBalanceBaseAsset;
lastTradeROI = lastTradeProfitLoss * 100 / tradePositionSize;
if (isNaN(lastTradeROI)) { lastTradeROI = 0; }
profit = balanceAssetA - bot.VALUES_TO_USE.initialBalanceA;
profit = balanceBaseAsset - bot.VALUES_TO_USE.initialBalanceA;
} else {
lastTradeProfitLoss = balanceAssetB - previousBalanceAssetB;
lastTradeProfitLoss = balanceQuotedAsset - previousBalanceQuotedAsset;
lastTradeROI = lastTradeProfitLoss * 100 / tradePositionSize;
if (isNaN(lastTradeROI)) { lastTradeROI = 0; }
profit = balanceAssetB - bot.VALUES_TO_USE.initialBalanceB;
profit = balanceQuotedAsset - bot.VALUES_TO_USE.initialBalanceB;
}
if (processingDailyFiles) {
@@ -2533,12 +2533,12 @@
}
}
if (balanceAssetA === Infinity) {
balanceAssetA = Number.MAX_SAFE_INTEGER
if (balanceBaseAsset === Infinity) {
balanceBaseAsset = Number.MAX_SAFE_INTEGER
}
if (balanceAssetB === Infinity) {
balanceAssetB = Number.MAX_SAFE_INTEGER
if (balanceQuotedAsset === Infinity) {
balanceQuotedAsset = Number.MAX_SAFE_INTEGER
}
let quotedBaseAsset = '"' + bot.VALUES_TO_USE.baseAsset + '"'
@@ -2549,8 +2549,8 @@
type: type,
marketRate: marketRate,
amount: 1,
balanceA: balanceAssetA,
balanceB: balanceAssetB,
balanceA: balanceBaseAsset,
balanceB: balanceQuotedAsset,
profit: profit,
lastTradeProfitLoss: lastTradeProfitLoss,
stopLoss: stopLoss,
@@ -2814,8 +2814,8 @@
interExecutionMemory.stopLoss = yesterday.stopLoss
interExecutionMemory.takeProfit = yesterday.takeProfit
interExecutionMemory.previousBalanceAssetA = yesterday.previousBalanceAssetA
interExecutionMemory.previousBalanceAssetB = yesterday.previousBalanceAssetB
interExecutionMemory.previousBalanceBaseAsset = yesterday.previousBalanceBaseAsset
interExecutionMemory.previousBalanceQuotedAsset = yesterday.previousBalanceQuotedAsset
interExecutionMemory.tradePositionRate = yesterday.tradePositionRate
interExecutionMemory.tradePositionSize = yesterday.tradePositionSize
@@ -2848,8 +2848,8 @@
endRate: yesterday.currentTrade.endRate
}
interExecutionMemory.balanceAssetA = yesterday.balanceAssetA;
interExecutionMemory.balanceAssetB = yesterday.balanceAssetB;
interExecutionMemory.balanceBaseAsset = yesterday.balanceBaseAsset;
interExecutionMemory.balanceQuotedAsset = yesterday.balanceQuotedAsset;
interExecutionMemory.lastTradeProfitLoss = yesterday.lastTradeProfitLoss;
interExecutionMemory.profit = yesterday.profit;
interExecutionMemory.lastTradeROI = yesterday.lastTradeROI;