LIVE trade working

This commit is contained in:
Luis Fernando Molina committed 2018-04-27 10:06:48 +02:00
1 parent ad492aa502
commit 45bbbdac44
3 files changed
+50 -79

No files matched your search

Binary file not shown.
+46 -77
View File
@@ -94,71 +94,29 @@
if (LOG_INFO === true) { logger.write("[INFO] start -> businessLogic -> Entering function."); }
/*
First thing we need to know is to see where we are:
Do we have open positions?
If not, shall we create one?
If yes, shall we move them?
As this is an example we can assume that we will have only one position, since we will be trading the whole allowed capital all at once.
You dont need to do this, you can have as many positions as you wish, and you will find them all at the positions array used below.
*/
let positions = assistant.getPositions();
if (positions.length > 0) {
if (positions[0].type === "buy") {
decideAboutBuyPosition(positions[0], callBack);
} else {
decideAboutSellPosition(positions[0], callBack);
}
decideWhatToDo(callBack);
} else {
/*
let rate = assistant.getMarketRate();
rate = Number(rate.toFixed(8));
Because this is an example, this bot is expected to always have an open position, either buy or sell.
If it does not have one, that means that it is running for the first time. In which case, we will create one
sell position at a very high price. Later, once the bot executes again, it will take it and move it to a reasonable
place and monitor it during each execution round.
const INITIAL_BALANCE_A = 0.000;
const INITIAL_BALANCE_B = 0.001;
Lets see first which is the current market rate.
let amountA = INITIAL_BALANCE_A;
let amountB = INITIAL_BALANCE_B;
*/
amountB = Number(amountB.toFixed(8));
let currentRate = assistant.getMarketRate();
amountA = amountB * rate;
amountA = Number(amountA.toFixed(8));
/*
As we just want to create the first order now and we do not want this order to get executed, we will put it at
the +50% of current exchange rate. Next Bot execution will move it strategically.
*/
let rate = currentRate;
/*
The rules of the this first competition states that the bot will have the following initial balance in USDT and BTC to trade with.
*/
const INITIAL_BALANCE_A = 0.0000;
const INITIAL_BALANCE_B = 0.0001;
let AmountA = INITIAL_BALANCE_A;
let AmountB = INITIAL_BALANCE_B;
/*
Here is this bot example, we are going to sell all AmountB at once. You can do this or whatever you think is better.
*/
let balance = assistant.getBalance();
AmountA = AmountB * rate;
assistant.putPosition("sell", rate, AmountA, AmountB, callBack);
assistant.putPosition("sell", rate, amountA, amountB, callBack);
}
} catch (err) {
@@ -167,53 +125,64 @@
}
}
function decideAboutBuyPosition(pPosition, callBack) {
function decideWhatToDo(callBack) {
try {
if (LOG_INFO === true) { logger.write("[INFO] start -> decideAboutBuyPosition -> Entering function."); }
if (LOG_INFO === true) { logger.write("[INFO] start -> decideWhatToDo -> Entering function."); }
/* For simplicity of this example bot, we will use here the same logic than when we are selling. */
decideAboutSellPosition(pPosition, callBack);
} catch (err) {
logger.write("[ERROR] start -> decideAboutBuyPosition -> err = " + err.message);
callBack(global.DEFAULT_FAIL_RESPONSE);
}
}
function decideAboutSellPosition(pPosition, callBack) {
try {
if (LOG_INFO === true) { logger.write("[INFO] start -> decideAboutSellPosition -> Entering function."); }
let balance = assistant.getBalance();
let balance = assistant.getAvailableBalance();
let rate = assistant.getMarketRate();
rate = Number(rate.toFixed(8));
let amountA;
let amountB;
if (balance.assetA > 0) {
let balanceA = Number(balance.assetA);
let balanceB = Number(balance.assetB);
if (balanceA === 0 && balanceB === 0) {
if (LOG_INFO === true) { logger.write("[INFO] start -> decideWhatToDo -> Cannot place orders since Available Balance is zero on both Assets."); }
callBack(global.DEFAULT_OK_RESPONSE);
return;
}
if (balanceA > 0) {
amountA = balanceA;
amountA = Number(amountA.toFixed(8));
amountA = balance.assetA;
amountB = amountA / rate;
amountB = Number(amountB.toFixed(8));
if (LOG_INFO === true) { logger.write("[INFO] start -> decideWhatToDo -> Decided to BUY."); }
if (LOG_INFO === true) { logger.write("[INFO] start -> decideWhatToDo -> amountA = " + amountA); }
if (LOG_INFO === true) { logger.write("[INFO] start -> decideWhatToDo -> amountB = " + amountB); }
if (LOG_INFO === true) { logger.write("[INFO] start -> decideWhatToDo -> rate = " + rate); }
assistant.putPosition("buy", rate, amountA, amountB, callBack);
} else {
amountB = balance.assetB;
amountB = balanceB;
amountB = Number(amountB.toFixed(8));
amountA = amountB * rate;
amountA = Number(amountA.toFixed(8));
if (LOG_INFO === true) { logger.write("[INFO] start -> decideWhatToDo -> Decided to SELL."); }
if (LOG_INFO === true) { logger.write("[INFO] start -> decideWhatToDo -> amountA = " + amountA); }
if (LOG_INFO === true) { logger.write("[INFO] start -> decideWhatToDo -> amountB = " + amountB); }
if (LOG_INFO === true) { logger.write("[INFO] start -> decideWhatToDo -> rate = " + rate); }
assistant.putPosition("sell", rate, amountA, amountB, callBack);
}
} catch (err) {
logger.write("[ERROR] start -> decideAboutSellPosition -> err = " + err.message);
logger.write("[ERROR] start -> decideWhatToDo -> err = " + err.message);
callBack(global.DEFAULT_FAIL_RESPONSE);
}
}
+4 -2
View File
@@ -26,7 +26,8 @@
"month": ""
},
"noTime": {
"run": "true"
"run": "true",
"resumeExecution": "true"
},
"fixedInterval": {
"run": "false",
@@ -36,7 +37,8 @@
"run": "false",
"beginDatetime": "2018-01-11T16:01:23.485Z",
"endDatetime": "2018-01-11T16:15:23.485Z",
"waitTime": 1000
"waitTime": 1000,
"resumeExecution": "false"
}
},
"normalWaitTime": 60000,