Adding fix for the move and put position.

We need to ensure the format of the values received as parameters on movePosition and putPosition. Rounding issues are fixed at validating the exchange positions on only 6 positions. Parsing additional values is not necesary.
This commit is contained in:
Matias Benitez committed 2018-07-05 15:28:07 -03:00
1 parent 49877c1487
commit 32afb3a1a6
1 file changed
+29 -24
+29 -24
View File
@@ -181,7 +181,7 @@
if (bot.processDatetime.valueOf() >= candle.begin && bot.processDatetime.valueOf() < candle.end) {
marketRate = (candle.open + candle.close) / 2;
marketRate = Number(parseFloat(marketRate).toFixed(8));
marketRate = Number(marketRate.toFixed(8));
context.newHistoryRecord.marketRate = marketRate;
ticker = {
@@ -543,9 +543,9 @@
id: Math.trunc(Math.random(1) * 1000000),
type: thisPosition.type,
rate: thisPosition.rate.toString(),
amountA: Number(parseFloat(thisPosition.amountA).toFixed(8)).toString(),
amountB: Number(parseFloat(thisPosition.amountB).toFixed(8)).toString(),
fee: Number(parseFloat(feeRate).toFixed(8)).toString(),
amountA: Number(thisPosition.amountA.toFixed(8)).toString(),
amountB: Number(thisPosition.amountB.toFixed(8)).toString(),
fee: Number(feeRate.toFixed(8)).toString(),
date: (new Date()).valueOf()
}
@@ -636,8 +636,8 @@
sumAssetB = sumAssetB + Number(trade.amountB);
}
sumAssetA = Number(parseFloat(sumAssetA).toFixed(8));
sumAssetB = Number(parseFloat(sumAssetB).toFixed(8));
sumAssetA = Number(sumAssetA.toFixed(8));
sumAssetB = Number(sumAssetB.toFixed(8));
if (position.amountB !== sumAssetB) {
logger.write(MODULE_NAME, "[ERROR] ordersExecutionCheck -> loopBody -> position.amountB = " + position.amountB);
@@ -711,10 +711,10 @@
sumAssetA = sumAssetA + Number(exchangePosition.amountA);
sumAssetB = sumAssetB + Number(exchangePosition.amountB);
sumAssetA = Number(parseFloat(sumAssetA).toFixed(6)); // Fixed to 6 positions to avoid rounding issues
sumAssetB = Number(parseFloat(sumAssetB).toFixed(8));
sumAssetA = Number(sumAssetA.toFixed(6)); // Fixed to 6 positions to avoid rounding issues
sumAssetB = Number(sumAssetB.toFixed(8));
if (parseFloat(position.amountA).toFixed(6) !== sumAssetA || position.amountB !== sumAssetB ) {
if (position.amountA.toFixed(6) !== sumAssetA || position.amountB !== sumAssetB ) {
logger.write(MODULE_NAME, "[ERROR] ordersExecutionCheck -> loopBody -> confirmOrderWasPartiallyExecuted -> position.amountA = " + position.amountA);
logger.write(MODULE_NAME, "[ERROR] ordersExecutionCheck -> loopBody -> confirmOrderWasPartiallyExecuted -> sumAssetA = " + sumAssetA);
logger.write(MODULE_NAME, "[ERROR] ordersExecutionCheck -> loopBody -> confirmOrderWasPartiallyExecuted -> position.amountB = " + position.amountB);
@@ -779,28 +779,28 @@
if (trade.type === 'buy') {
let fee = Number(trade.fee) * trade.amountB;
let fixedFee = Number(parseFloat(fee).toFixed(8));
let fixedFee = Number(fee.toFixed(8));
assetA = context.executionContext.balance.assetA - Number(trade.amountA);
assetB = context.executionContext.balance.assetB + Number(trade.amountB) - fixedFee;
let available = context.executionContext.availableBalance.assetB + Number(trade.amountB) - fixedFee;
context.executionContext.availableBalance.assetB = Number(parseFloat(available).toFixed(8));
context.executionContext.availableBalance.assetB = Number(available.toFixed(8));
}
if (trade.type === 'sell') {
let fee = Number(trade.fee) * trade.amountA;
let fixedFee = Number(parseFloat(fee).toFixed(8));
let fixedFee = Number(fee.toFixed(8));
assetA = context.executionContext.balance.assetA + Number(trade.amountA) - fixedFee;
assetB = context.executionContext.balance.assetB - Number(trade.amountB);
let available = context.executionContext.availableBalance.assetA + Number(trade.amountA) - fixedFee;
context.executionContext.availableBalance.assetA = Number(parseFloat(available).toFixed(8));
context.executionContext.availableBalance.assetA = Number(available.toFixed(8));
}
context.executionContext.balance.assetA = Number(parseFloat(assetA).toFixed(8));
context.executionContext.balance.assetB = Number(parseFloat(assetB).toFixed(8));
context.executionContext.balance.assetA = Number(assetA.toFixed(8));
context.executionContext.balance.assetB = Number(assetB.toFixed(8));
}
} catch (err) {
@@ -859,10 +859,6 @@
try {
if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] putPosition -> Entering function."); }
if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] putPosition -> pType = " + pType); }
if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] putPosition -> pRate = " + pRate); }
if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] putPosition -> pAmountA = " + pAmountA); }
if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] putPosition -> pAmountB = " + pAmountB); }
/* Removing extra decimals. */
@@ -870,6 +866,11 @@
pAmountA = Number(parseFloat(pAmountA).toFixed(8));
pAmountB = Number(parseFloat(pAmountB).toFixed(8));
if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] putPosition -> pType = " + pType); }
if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] putPosition -> pRate = " + pRate); }
if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] putPosition -> pAmountA = " + pAmountA); }
if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] putPosition -> pAmountB = " + pAmountB); }
/* Validations that the limits are not surpassed. */
if (pType === 'buy') {
@@ -889,7 +890,7 @@
return;
}
let aRate = Number(parseFloat(pAmountA / pRate).toFixed(8));
let aRate = Number((pAmountA / pRate).toFixed(8));
if (aRate !== pAmountB) {
@@ -925,7 +926,7 @@
return;
}
let bRate = Number(parseFloat(pAmountB * pRate).toFixed(8));
let bRate = Number((pAmountB * pRate).toFixed(8));
if (bRate !== pAmountA) {
@@ -1022,14 +1023,14 @@
if (position.type === 'buy') {
context.executionContext.availableBalance.assetA = context.executionContext.availableBalance.assetA - pAmountA;
context.executionContext.availableBalance.assetA = Number(parseFloat(context.executionContext.availableBalance.assetA).toFixed(8));
context.executionContext.availableBalance.assetA = Number(context.executionContext.availableBalance.assetA.toFixed(8));
context.newHistoryRecord.lastBuyRate = pRate;
}
if (position.type === 'sell') {
context.executionContext.availableBalance.assetB = context.executionContext.availableBalance.assetB - pAmountB;
context.executionContext.availableBalance.assetB = Number(parseFloat(context.executionContext.availableBalance.assetB).toFixed(8));
context.executionContext.availableBalance.assetB = Number(context.executionContext.availableBalance.assetB.toFixed(8));
context.newHistoryRecord.lastSellRate = pRate;
}
@@ -1068,9 +1069,12 @@
if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] movePosition -> pPosition = " + JSON.stringify(pPosition)); }
if (global.LOG_CONTROL[MODULE_NAME].logInfo === true) { logger.write(MODULE_NAME, "[INFO] movePosition -> pNewRate = " + pNewRate); }
/* Removing extra decimals. */
pNewRate = Number(parseFloat(pNewRate).toFixed(8));
let newAmountB;
if (pPosition.type === "buy") {
newAmountB = parseFloat(pPosition.amountA / pNewRate).toFixed(7); // If it was fixed to 8 positions there could be some rounding up and there will be not enough AssetA for buying
newAmountB = Number((pPosition.amountA / pNewRate).toFixed(8));
} else {
newAmountB = pPosition.amountB;
}
@@ -1293,4 +1297,5 @@
return context.executionContext.remember[pKey];
}
};