vineetbhargav86
9 years ago
8 changed files with 625 additions and 36 deletions
@ -0,0 +1,381 @@ |
|||||
|
|
||||
|
/* |
||||
|
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(); |
||||
|
}; |
Loading…
Reference in new issue