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

/*
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();
};