Skip to content

Instantly share code, notes, and snippets.

@arthurbarros
Last active April 28, 2017 18:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save arthurbarros/8378735 to your computer and use it in GitHub Desktop.
Save arthurbarros/8378735 to your computer and use it in GitHub Desktop.
PoC: how your wallet reacts on panic buy/sell on litecoin currency
var WebSocket = require('ws'),
Entities = require('html-entities').XmlEntities,
http = require('https');
var TransportHelper = function(){}
TransportHelper.prototype.parse = function(data)
{
data = JSON.parse(JSON.parse(data).data);
if(typeof data == 'string'){
return JSON.parse(data);
}
return false;
}
TransportHelper.message = function(data, callback)
{
if(data = this.parse(data)){
callback(data);
}
}
var Wallet = function()
{
this.ltc;
this.dollar;
}
Wallet.prototype.currentSituation = function(action, price)
{
console.log('############################');
console.log('Act:', action + ' Price: ' + price);
console.log('LTC ', number_format(this.ltc,8));
console.log('USD ', number_format(this.dollar,2,'.',','));
console.log('############################');
}
var Dict = function(){
this.buy = ['buy','buying','rise','up','pump','moon','gree','cny','CNY','spike'];
this.sell = ['sell','selling','crash','down','dump','earth core','red','boom'];
this.ltc = ['ltc','LTC','Ltc','litecoin','Litecoin', 'chikun','Chikun','CHIKUN'];
}
Dict.prototype.typeOrder = function(message)
{
var buy = 0;
var sell = 0;
for(var index in this.buy){
word = this.buy[index];
buy += (message.split(word).length-1);
}
for(var index in this.sell){
word = this.sell[index];
sell += (message.split(word).length-1);
}
if(buy > sell){
return 'buy';
}else if(buy < sell){
return 'sell';
}else{
return false;
}
}
Dict.prototype.ocurrLtc = function(message)
{
var occur = 0;
for(var index in this.ltc){
word = this.ltc[index]
occur += (message.split(word).length-1);
}
return occur;
}
var Trader = function()
{
this.wallet;
this.dict;
}
Trader.prototype.act = function(action)
{
if((act = this.dict.typeOrder(action)) && this.dict.ocurrLtc(action)){
if(act == 'buy'){
this.buyLtc(0.1);
}else{
this.sellLtc(0.1);
}
}
}
Trader.prototype.setDict = function(dict)
{
this.dict = dict;
}
Trader.prototype.setWallet = function(wallet)
{
this.wallet = wallet;
}
Trader.prototype.getWallet = function()
{
return this.wallet;
}
Trader.prototype.sellLtc = function(amount)
{
var self = this;
self.getPrice(function(price){
if(self.wallet.ltc >= amount){
self.wallet.dollar += (price*amount)*0.98;
self.wallet.ltc -= amount;
}
self.wallet.currentSituation('SELL', number_format(price,2,'.',','));
});
}
Trader.prototype.buyLtc = function(amount)
{
var self = this;
this.getPrice(function(price){
if(self.wallet.dollar >= (price*amount)*1.02){
self.wallet.dollar -= (price*amount)*1.02;
self.wallet.ltc += amount;
}
self.wallet.currentSituation('BUY', number_format(price,2,'.',','));
});
}
Trader.prototype.getPrice = function(callback)
{
var request = http.get('https://btc-e.com/api/2/ltc_usd/ticker', function(res){
var data = '';
res.on('data', function(chunck){
data += chunck;
});
res.on('end', function(){
data = JSON.parse(data);
callback(data.ticker.last);
});
});
request.on('error', function(e){
console.log(e.message);
});
request.end();
}
var ws = new WebSocket('wss://ws.pusherapp.com/app/4e0ebd7a8b66fa3554a4?protocol=6&client=js&version=2.0.0&flash=false');
var entities = new Entities();
var wallet = new Wallet();
wallet.dollar = 100;
wallet.ltc = 0;
var trader = new Trader();
trader.setWallet(wallet);
var dict = new Dict();
trader.setDict(dict);
var transportHelper = new TransportHelper();
//Webscoket Open
ws.on('open', function() {
try{
ws.send('{"event":"pusher:subscribe","data":{"channel":"chat_en"}}');
}catch (e){
console.log(e);
}
});
ws.on('message', function(data){
if(data = transportHelper.parse(data)){
if(data.msg){
trader.act(data.msg.toLowerCase());
}
}
});
function number_format(number, decimals, dec_point, thousands_sep) {
number = (number + '').replace(/[^0-9+\-Ee.]/g, '');
var n = !isFinite(+number) ? 0 : +number,
prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
s = '',
toFixedFix = function (n, prec) {
var k = Math.pow(10, prec);
return '' + Math.round(n * k) / k;
};
// Fix for IE parseFloat(0.55).toFixed(0) = 0;
s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
if (s[0].length > 3) {
s[0] = s[0].replace(/\B(?=(?:\d{3})+(?!\d))/g, sep);
}
if ((s[1] || '').length < prec) {
s[1] = s[1] || '';
s[1] += new Array(prec - s[1].length + 1).join('0');
}
return s.join(dec);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment