You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
381 lines
14 KiB
381 lines
14 KiB
|
|
/*
|
|
var base="NXT";
|
|
var rel="BTC";
|
|
var depth=20;
|
|
var exchange="poloniex";
|
|
|
|
var currentValues={"low":0,"high":0};
|
|
var valuesHistory=[];
|
|
|
|
var BalanceBaseHistory=[];
|
|
var BalanceRelHistory=[];
|
|
|
|
var timer=0;
|
|
|
|
var interval=5000; //5 sec
|
|
|
|
var decision_timelimit=1000*60; //1 min
|
|
|
|
var percentChange=5;
|
|
|
|
var volume=10;
|
|
|
|
var ordersHistory=[];
|
|
|
|
var loopcounter=-1;
|
|
|
|
var ranFirstTyme=true;
|
|
|
|
var ordernumber="";
|
|
var phase=0; // 0 means buy 1 means sell
|
|
var transactionCount=0;
|
|
*/
|
|
var IntegrationSettings={
|
|
"phase":0,
|
|
"currentValues":{"low":0,"high":0},
|
|
"exchange":"poloniex",
|
|
"base":"NXT",
|
|
"rel":"BTC",
|
|
"depth":20,
|
|
"volume":10,
|
|
"ordersHistory":[],
|
|
"valuesHistory":[],
|
|
"BalanceRelHistory":[],
|
|
"BalanceBaseHistory":[],
|
|
"timer":0,
|
|
"decision_timelimit":1000*60,
|
|
"interval":5000,
|
|
"percentChange":5,
|
|
"loopcounter":-1,
|
|
"ranFirstTyme":true,
|
|
"ordernumber":""
|
|
|
|
};
|
|
|
|
var start_integrationTest=function(){
|
|
|
|
mainlogic();
|
|
};
|
|
|
|
|
|
|
|
var mainlogic=function(){
|
|
IntegrationSettings.loopcounter=IntegrationSettings.loopcounter+1;
|
|
get_current_min_max(); // step 1
|
|
|
|
};
|
|
|
|
var get_current_min_max=function(){
|
|
|
|
var request='{"agent":"InstantDEX","method":"orderbook","exchange":"'+IntegrationSettings.exchange+'","base":"'+IntegrationSettings.base+'","rel":"'+IntegrationSettings.rel+'","depth":'+IntegrationSettings.depth+',"allfields":0,"invert":0}';
|
|
|
|
SPNAPI.makeRequest(request, function(request,response){
|
|
|
|
/*
|
|
*
|
|
* {"exchange":"btce","inverted":0,"base":"LTC","rel":"BTC","bids":[0.00814000, 0.00813000, 0.00812000, 0.00811000, 0.00810000, 0.00809000, 0.00808000, 0.00807000, 0.00806000, 0.00805000, 0.00804000, 0.00803000, 0.00802000, 0.00801000, 0.00800000, 0.00799000, 0.00798000, 0.00797000, 0.00796000, 0.00795000],"asks":[0.00816000, 0.00817000, 0.00818000, 0.00819000, 0.00820000, 0.00821000, 0.00822000, 0.00823000, 0.00824000, 0.00825000, 0.00826000, 0.00827000, 0.00828000, 0.00829000, 0.00830000, 0.00831000, 0.00832000, 0.00833000, 0.00834000, 0.00835000],"numbids":20,"numasks":20,"highbid":0.00814000,"lowask":0.00816000,"timestamp":1454329614,"time":"2016-02-01T12:26:54Z","maxdepth":20,"tag":"374388797247258721"}
|
|
*/
|
|
response=JSON.parse(response);
|
|
if(response.lowask){
|
|
IntegrationSettings.valuesHistory[IntegrationSettings.loopcounter]=IntegrationSettings.currentValues;
|
|
IntegrationSettings.currentValues.low=response.lowask;
|
|
IntegrationSettings.currentValues.high=response.highbid;
|
|
console.log("current low: "+response.lowask+" current high:"+response.highbid);
|
|
if(IntegrationSettings.ranFirstTyme){buyOrder();IntegrationSettings.ranFirstTyme=false;} // step 2
|
|
else{
|
|
if(IntegrationSettings.phase===0){
|
|
checkifBuySuccessful(); // step 3
|
|
}else{
|
|
checkifSellSuccessful(); //step 4
|
|
}
|
|
|
|
|
|
}
|
|
|
|
}else{
|
|
get_current_min_max();
|
|
}
|
|
});
|
|
|
|
};
|
|
|
|
//http://127.0.0.1:7778/api/InstantDEX/buy?exchange={string}&base={string}&rel={string}&price={float}&volume={float}&dotrade={float}
|
|
var buyOrder=function(){
|
|
console.log("trying to buy at current lowprice");
|
|
IntegrationSettings.phase=0;
|
|
var request='{"agent":"InstantDEX","method":"buy","exchange":"'+IntegrationSettings.exchange+'","base":"'+IntegrationSettings.base+'","rel":"'+IntegrationSettings.rel+'","price":'+IntegrationSettings.currentValues.low+',"volume":'+IntegrationSettings.volume+',"dotrade":1}';
|
|
|
|
|
|
SPNAPI.makeRequest(request, function(request,response){
|
|
|
|
response=JSON.parse(response);
|
|
if(response.orderNumber){
|
|
//transactionCount=transactionCount+1;
|
|
IntegrationSettings.ordernumber=response.orderNumber;
|
|
//response.count=transactionCount;
|
|
response.today=new Date().today();
|
|
response.now=new Date().timeNow();
|
|
response.type="buy";
|
|
IntegrationSettings.ordersHistory.push(response);
|
|
// check if the order is open/not
|
|
if(response.resultingTrades.length!==0){
|
|
// check if it is completed
|
|
attemptSell();
|
|
}else{
|
|
setTimeout(function () { mainlogic(); }, IntegrationSettings.decision_timelimit);
|
|
// execute after decision_timelimit
|
|
}
|
|
}
|
|
|
|
});
|
|
};
|
|
|
|
//http://127.0.0.1:7778/api/InstantDEX/sell?exchange={string}&base={string}&rel={string}&price={float}&volume={float}&dotrade={float}
|
|
|
|
var sellOrder=function(){
|
|
|
|
var request='{"agent":"InstantDEX","method":"sell","exchange":"'+IntegrationSettings.exchange+'","base":"'+IntegrationSettings.base+'","rel":"'+IntegrationSettings.rel+'","price":'+IntegrationSettings.price+',"volume":'+IntegrationSettings.volume+',"dotrade":1}';
|
|
SPNAPI.makeRequest(request, function(request,response){
|
|
|
|
show_resposnse(response);
|
|
});
|
|
};
|
|
|
|
var checkOrderstatus=function(){
|
|
|
|
var request='{"agent":"InstantDEX","method":"orderstatus","exchange":"'+IntegrationSettings.exchange+'","orderid":"'+IntegrationSettings.orderid+'"}';
|
|
SPNAPI.makeRequest(request, function(request,response){
|
|
|
|
|
|
});
|
|
};
|
|
|
|
var getTradeHistory=function(){
|
|
var request='{"agent":"InstantDEX","method":"tradehistory","exchange":"'+IntegrationSettings.exchange+'"}';
|
|
SPNAPI.makeRequest(request, function(request,response){
|
|
response=JSON.parse(response);
|
|
var othercurr="";
|
|
if(IntegrationSettings.rel!=="BTC"){othercurr=IntegrationSettings.rel;}
|
|
else{othercurr=IntegrationSettings.base;}
|
|
if(response["BTC_"+othercurr]){
|
|
// transaction is completed
|
|
console.log("transaction is complete");
|
|
}
|
|
});
|
|
|
|
};
|
|
|
|
var checkifBuySuccessful=function (){
|
|
console.log("checking if previus buy was successful");
|
|
var request='{"agent":"InstantDEX","method":"openorders","exchange":"'+IntegrationSettings.exchange+'"}';
|
|
SPNAPI.makeRequest(request, function(request,response){
|
|
response=JSON.parse(response);
|
|
var othercurr="";
|
|
var unsuccessful=false;
|
|
if(IntegrationSettings.rel!=="BTC"){othercurr=IntegrationSettings.rel;}
|
|
else{othercurr=IntegrationSettings.base;}
|
|
if(response["BTC_"+othercurr].length>0){
|
|
for(var jsn in response["BTC_"+othercurr]){
|
|
if(jsn.orderNumber===IntegrationSettings.ordernumber && jsn.type==="buy"){
|
|
unsuccessful=true;
|
|
break;
|
|
}
|
|
}
|
|
if(unsuccessful){
|
|
cancelandReBuy();
|
|
}else{
|
|
attemptSell();
|
|
}
|
|
|
|
}else{
|
|
attemptSell();
|
|
}
|
|
});
|
|
|
|
};
|
|
|
|
var checkifSellSuccessful=function (){
|
|
console.log("checking if previous sell was successful");
|
|
var request='{"agent":"InstantDEX","method":"openorders","exchange":"'+IntegrationSettings.exchange+'"}';
|
|
SPNAPI.makeRequest(request, function(request,response){
|
|
response=JSON.parse(response);
|
|
var othercurr="";
|
|
var unsuccessful=false;
|
|
if(IntegrationSettings.rel!=="BTC"){othercurr=IntegrationSettings.rel;}
|
|
else{othercurr=IntegrationSettings.base;}
|
|
if(response["BTC_"+othercurr].length>0){
|
|
for(var jsn in response["BTC_"+othercurr]){
|
|
if(jsn.orderNumber===IntegrationSettings.ordernumber && jsn.type==="sell"){
|
|
unsuccessful=true;
|
|
break;
|
|
}
|
|
}
|
|
if(unsuccessful){
|
|
cancelandReSell();
|
|
}else{
|
|
console.log("Finally we are done!");
|
|
// and we are done!!
|
|
}
|
|
|
|
}else{
|
|
console.log("Finally we are done!");
|
|
// and we are done!!
|
|
}
|
|
});
|
|
|
|
};
|
|
|
|
|
|
var cancelandReBuy=function(){
|
|
cancelBuy();
|
|
|
|
|
|
};
|
|
var cancelandReSell=function(){
|
|
cancelSell();
|
|
};
|
|
|
|
|
|
var reSell=function(){
|
|
IntegrationSettings.phase=1; // change phase to control the flow
|
|
var newlow=0;
|
|
if(IntegrationSettings.valuesHistory[IntegrationSettings.loopcounter].high===IntegrationSettings.currentValues.high){
|
|
newlow=IntegrationSettings.currentValues.high-(IntegrationSettings.currentValues.high*IntegrationSettings.percentChange)/100;
|
|
console.log("selling at reduced high "+newlow);
|
|
}else{
|
|
|
|
newlow=IntegrationSettings.currentValues.high;
|
|
console.log("selling at current high "+newlow);
|
|
}
|
|
var request='{"agent":"InstantDEX","method":"buy","exchange":"'+IntegrationSettings.exchange+'","base":"'+IntegrationSettings.base+'","rel":"'+IntegrationSettings.rel+'","price":'+newlow+',"volume":'+IntegrationSettings.volume+',"dotrade":1}';
|
|
IntegrationSettings.totalBoughtRel=newlow;
|
|
IntegrationSettings.totalBoughtBase=IntegrationSettings.volume;
|
|
|
|
SPNAPI.makeRequest(request, function(request,response){
|
|
|
|
response=JSON.parse(response);
|
|
if(response.orderNumber){
|
|
IntegrationSettings.ordernumber=response.orderNumber;
|
|
response.today=new Date().today();
|
|
response.now=new Date().timeNow();
|
|
response.type="sell";
|
|
IntegrationSettings.ordersHistory.push(response);
|
|
// check if the order is open/not
|
|
if(response.resultingTrades.length!==0){
|
|
// check if it is completed
|
|
attemptSell();
|
|
}else{
|
|
setTimeout(function () { mainlogic(); }, IntegrationSettings.decision_timelimit);
|
|
// execute after decision_timelimit
|
|
}
|
|
}
|
|
|
|
});
|
|
};
|
|
|
|
var rebuy=function(){
|
|
IntegrationSettings.phase=0; // change phase to control the flow
|
|
var newlow=0;
|
|
if(IntegrationSettings.valuesHistory[IntegrationSettings.loopcounter].low===IntegrationSettings.currentValues.low){
|
|
newlow=IntegrationSettings.currentValues.low+(IntegrationSettings.currentValues.low*IntegrationSettings.percentChange)/100;
|
|
newlow=IntegrationSettings.currentValues.low;
|
|
console.log("buying at current low "+newlow);
|
|
}else{
|
|
newlow=IntegrationSettings.currentValues.low;
|
|
console.log("buying at current low "+newlow);
|
|
|
|
}
|
|
var request='{"agent":"InstantDEX","method":"buy","exchange":"'+IntegrationSettings.exchange+'","base":"'+IntegrationSettings.base+'","rel":"'+IntegrationSettings.rel+'","price":'+newlow+',"volume":'+IntegrationSettings.volume+',"dotrade":1}';
|
|
totalBoughtRel=newlow;
|
|
totalBoughtBase=volume;
|
|
|
|
SPNAPI.makeRequest(request, function(request,response){
|
|
|
|
response=JSON.parse(response);
|
|
if(response.orderNumber){
|
|
//transactionCount=transactionCount+1;
|
|
ordernumber=response.orderNumber;
|
|
//response.count=transactionCount;
|
|
response.today=new Date().today();
|
|
response.now=new Date().timeNow();
|
|
response.type="buy";
|
|
IntegrationSettings.ordersHistory.push(response);
|
|
// check if the order is open/not
|
|
if(response.resultingTrades.length!==0){
|
|
// check if it is completed
|
|
attemptSell();
|
|
}else{
|
|
setTimeout(function () { mainlogic(); }, IntegrationSettings.decision_timelimit);
|
|
// execute after decision_timelimit
|
|
}
|
|
}
|
|
|
|
});
|
|
};
|
|
|
|
var cancelBuy=function(){
|
|
|
|
var request='{"agent":"InstantDEX","method":"cancelorder","exchange":"'+IntegrationSettings.exchange+'","orderid":"'+IntegrationSettings.ordernumber+'"}';
|
|
SPNAPI.makeRequest(request, function(request,response){
|
|
|
|
response=JSON.parse(response);
|
|
if(response.success===1){
|
|
rebuy();
|
|
}else{
|
|
attemptSell();
|
|
}
|
|
});
|
|
};
|
|
|
|
|
|
var cancelSell=function(){
|
|
|
|
var request='{"agent":"InstantDEX","method":"cancelorder","exchange":"'+IntegrationSettings.exchange+'","orderid":"'+IntegrationSettings.ordernumber+'"}';
|
|
SPNAPI.makeRequest(request, function(request,response){
|
|
|
|
response=JSON.parse(response);
|
|
if(response.success===1){
|
|
reSell();
|
|
}else{
|
|
console.log("Finally we are done!");
|
|
// and we are done!!
|
|
}
|
|
});
|
|
};
|
|
|
|
var attemptSell=function(){
|
|
IntegrationSettings.phase=1;
|
|
var request='{"agent":"InstantDEX","method":"sell","exchange":"'+IntegrationSettings.exchange+'","base":"'+IntegrationSettings.base+'","rel":"'+IntegrationSettings.rel+'","price":'+IntegrationSettings.currentValues.high+',"volume":'+IntegrationSettings.volume+',"dotrade":1}';
|
|
SPNAPI.makeRequest(request, function(request,response){
|
|
response=JSON.parse(response);
|
|
if(response.orderNumber){
|
|
IntegrationSettings.transactionCount=IntegrationSettings.transactionCount+1;
|
|
ordernumber=response.orderNumber;
|
|
response.count=IntegrationSettings.transactionCount;
|
|
response.today=new Date().today();
|
|
response.now=new Date().timeNow();
|
|
response.type="sell";
|
|
IntegrationSettings.ordersHistory.push(response);
|
|
// check if the order is open/not
|
|
if(response.resultingTrades.length!==0){
|
|
// check if it is completed
|
|
console.log("Finally we are done!");
|
|
}else{
|
|
setTimeout(function () { mainlogic(); }, IntegrationSettings.decision_timelimit);
|
|
// execute after decision_timelimit
|
|
}
|
|
}
|
|
});
|
|
};
|
|
|
|
|
|
|
|
Date.prototype.today = function () {
|
|
return ((this.getDate() < 10)?"0":"") + this.getDate() +"/"+(((this.getMonth()+1) < 10)?"0":"") + (this.getMonth()+1) +"/"+ this.getFullYear();
|
|
};
|
|
|
|
// For the time now
|
|
Date.prototype.timeNow = function () {
|
|
return ((this.getHours() < 10)?"0":"") + this.getHours() +":"+ ((this.getMinutes() < 10)?"0":"") + this.getMinutes() +":"+ ((this.getSeconds() < 10)?"0":"") + this.getSeconds();
|
|
};
|