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