From a8eb927265025a95217bb2c448d7733d50a5c02f Mon Sep 17 00:00:00 2001 From: Joe Tretter Date: Wed, 2 Dec 2020 10:38:29 -0600 Subject: [PATCH] change to persist transactions and handle pairs as provided by commandline parameter. --- kraken-api_plain/KrakenTradeHistory.js | 102 +++++++++++++++++-------- 1 file changed, 70 insertions(+), 32 deletions(-) diff --git a/kraken-api_plain/KrakenTradeHistory.js b/kraken-api_plain/KrakenTradeHistory.js index 2901b2e..3fd316f 100644 --- a/kraken-api_plain/KrakenTradeHistory.js +++ b/kraken-api_plain/KrakenTradeHistory.js @@ -1,13 +1,33 @@ /* 2020-01-09 - get the gains generated by my automated ETC trading. 2020-10-23 - fix problem because API requires windowing to handle more than 50 rows, implemented windowing. +2020-12-02 - change to persist transactions and handle pairs as provided by commandline parameter. */ const key = 'SOOOJ7OhVCOpJE4DAWz8v5B25UpdYya9buF8DFAkHzmUab5E9i0PlEPh'; // API Key const secret = 'UytAbgU8ty3n5a+JhaoIlcfh8zM4OBGY6PCC+Cfg2NI4waVzM52BBp9qmmyczrTDQpeha8q3nHeE/p7wNWKiVA=='; // API Private Key const KrakenClient = require('kraken-api'); const kraken = new KrakenClient(key, secret); +const fs = require('fs') + +const storeData = (data, path) => { + try { + fs.writeFileSync(path, JSON.stringify(data)); + } catch (err) { + console.error(err); + } +} + +const loadData = (path) => { + try { + return JSON.parse(fs.readFileSync(path, 'utf8')); + } catch (err) { + console.error(err); + return false; + } +} + (async () => { try { let params={ @@ -19,26 +39,55 @@ const kraken = new KrakenClient(key, secret); if (thePair===undefined) { thePair="XXMRZUSD"; } + thePair=thePair.toUpperCase(); // the pairs are always upper case. + console.log("Processing pair: ", thePair); - let allBalances=await kraken.api('Balance'); - //console.log(JSON.stringify(allBalances)); - let etcUsdQuote = await kraken.api('Ticker', { pair : thePair }); - //console.log(JSON.stringify(etcUsdQuote)); + + let maxTimestamp=0; + let allTrades=loadData("allTrades.json"); + allTrades.forEach(dta=>{if (dta.time>maxTimestamp) {maxTimestamp=dta.time;} }); + params.start=maxTimestamp; + console.log("Max-Timestamp",maxTimestamp); + let allTransactions = await kraken.api('TradesHistory', params); - - let dailyResults = []; - //console.log("Get Trade History ",JSON.stringify(allTransactions,null," ")); let allTradeIDs=Object.keys(allTransactions.result.trades); - let sumUSD=0; - let sumCommission=0; let numTrans=allTradeIDs.length; - let numTrades=0; + + console.log("Number of new Transactions: ",numTrans); for (let i=0;i ${Number(theTrade.cost).toFixed(2).padStart(9," ")}(-${Number(theTrade.fee).toFixed(3).padStart(5," ")})`);//JSON.stringify(theTrade)); let multiplier=1; if (theTrade.type==="buy") { multiplier=-1; @@ -54,38 +103,27 @@ const kraken = new KrakenClient(key, secret); dailyResults[transactionDate] += (Number(theTrade.cost) * multiplier) dailyResults[transactionDate] -= Number(theTrade.fee); } - - // console.log(params.ofs,JSON.stringify(theTrade)); - if ((params.ofs % 50) == 0) { // Not really great style to update the for condition var here, but it works... - console.log("Load more results; offset ",params.ofs); - params.nonce = new Date() * 1000; - allTransactions = await kraken.api('TradesHistory', params); - allTradeIDs=allTradeIDs.concat(Object.keys(allTransactions.result.trades)); - numTrans=allTradeIDs.length; - } } - Object.keys(dailyResults).forEach(date=>{ - // console.log(date," -> ",dailyResults[date]); - }); + let allBalances=await kraken.api('Balance'); + let pairQuote = await kraken.api('Ticker', { pair : thePair }); - console.log("# trades : ", numTrades); - console.log("SUM USD : ", sumUSD); - console.log("SUM fees : ", sumCommission); - let netGain = sumUSD - sumCommission; - console.log("Net Gain : ", netGain); - - // find the currency by looking for "startsWith" match in the symbol in the pair.. + // find the currency by looking for "startsWith" match in the symbol in the pair. let theCurrency=undefined; Object.keys(allBalances.result).forEach((currency)=>{ if (thePair.indexOf(currency)===0) { theCurrency=currency; } }); - + + console.log("# trades : ", numTrades); + console.log("SUM USD : ", sumUSD); + console.log("SUM fees : ", sumCommission); + let netGain = sumUSD - sumCommission; + console.log("Net Gain : ", netGain); let numCoinsHeld = Number(allBalances.result[theCurrency]); console.log("# coins Held : ", numCoinsHeld, " [", theCurrency,"]"); - let sellPrice = Number(etcUsdQuote.result[thePair].b[0]); + let sellPrice = Number(pairQuote.result[thePair].b[0]); console.log("Current Price : ", sellPrice); let worthHeldCoins = numCoinsHeld * sellPrice; console.log("Worth held coins : ", worthHeldCoins);