Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Historical data #3

Open
LesterCovax opened this issue Dec 26, 2017 · 7 comments
Open

Historical data #3

LesterCovax opened this issue Dec 26, 2017 · 7 comments

Comments

@LesterCovax
Copy link
Owner

No description provided.

@Project-42
Copy link
Collaborator

Hi,
Hope this can help.
I tried in the past using ImportJSON from this API:
https://min-api.cryptocompare.com/data/histoday?aggregate=1&e=CCCAGG&fsym=ETH&limit=31&tsym=GBP

But was not able to make it work correctly.

Im sure you can find a way to add that to the code :D

@RJMoise
Copy link

RJMoise commented Jan 4, 2018

I wrote a quick function to save data to a sheet called history, not sure if its exactly what you are talking about or not. Basically I have a 4 hour trigger on my getData and getHistory, so when the data updates its sent to the history page. It only saves data since you started using it, not the whole history of the coin.
I'm sure a more talented coder could enhance its abilities. I've attached a pic of my history sheet and what it looks like.

capture

@LesterCovax
Copy link
Owner Author

Nice! Yeah, pretty much that. IMO 1/day would be fine but the user could define their trigger. I've already been running into execution time limits with sheets since the overhaul. They annoyingly have limits on items per call and script execution time. I think the path forward is splitting up the custom functions/overall scripts more.

Is that graph on the left just using the wrong axis? Were you trying to map balance/value of each currency over time?

@RJMoise
Copy link

RJMoise commented Jan 8, 2018

I found that every 4 hours was to often as well. Of course the trigger is person specific so it can be whatever is needed. Yeah I think the left graph looks goofy Im not a chart guy by any means and I was trying to visualize each coins gains/losses but I ended up removing it and just leaving the totals chart.

@dbuskariol
Copy link

@LeMoise could you share the getHistory() function you wrote? This is exactly what i'm after 😄

@RJMoise
Copy link

RJMoise commented Jan 11, 2018

This is my (probably) poorly written history function. I have a sheet that multiples the coins BTC value by the amount of each coin I hold and places them in a column. Then I just read in those values once a day and record them. I then calculate the change between yesterdays total and todays to get an rough gain/loss percentage per day.
image

function history(){
var test = (new Date())
  for (var i=1; i<=100; i++) {
  var cell = ssHist.getRange('A'+i)
    if (cell.isBlank()) {
      ssHist.getRange('A'+i).setValue(ssHodl.getRange('D5').getValue());
      ssHist.getRange('B'+i).setValue(ssHodl.getRange('D6').getValue())
      ssHist.getRange('C'+i).setValue(ssHodl.getRange('D7').getValue())
      ssHist.getRange('D'+i).setValue(ssHodl.getRange('D8').getValue())
      ssHist.getRange('E'+i).setValue(ssHodl.getRange('D9').getValue())
      ssHist.getRange('F'+i).setValue(ssHodl.getRange('D10').getValue())
      ssHist.getRange('G'+i).setValue(ssHodl.getRange('D11').getValue())
      ssHist.getRange('H'+i).setValue(ssHodl.getRange('D12').getValue())
      ssHist.getRange('I'+i).setValue(ssHodl.getRange('D13').getValue())
      ssHist.getRange('J'+i).setValue(ssHodl.getRange('D14').getValue())
      ssHist.getRange('K'+i).setValue(ssHodl.getRange('D15').getValue())
      ssHist.getRange('L'+i).setValue(ssHodl.getRange('D16').getValue())
      ssHist.getRange('M'+i).setValue(ssHodl.getRange('D20').getValue())
      ssHist.getRange('N'+i).setValue(ssHodl.getRange('E20').getValue())
      ssHist.getRange('O'+i).setValue(((ssHist.getRange('M'+i).getValue())/(ssHist.getRange('M'+(i-1)).getValue()))-1)
      ssHist.getRange('P'+i).setValue(new Date())
      break;
    }
  }

@JSterling8
Copy link

JSterling8 commented Jan 11, 2018

Looks like a really good start. I found a way to clean it up a little bit. In your sheet, have a Date column that increments by 1 day at a time. Somewhere else in the same sheet, have a Todays Date cell with this in it =MATCH(today(),'Crypto Value Over Time'!B1:B), (the name of my sheet is "Crypto Value Over Time", and the date column is B. This will put the current date's row number into a box for you. Right click on todays row index and select "Define Named Range" and in the box that appears on the right set the name to todaysRowNumberCrypto. You can also define named ranges in your sheet that has the current valuations of your tokens. I name mine like vtcCurrentValue. Then bringing that all together you can make a function like this:

function recordDailyCryptoNetWorth() {
  
  var netWorthSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Net Worth");
  var cnwOverTimeSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Crypto Value Over Time");
  
  var todaysRowNumber = cnwOverTimeSheet.getRange("todaysRowNumberCrypto").getValue();
  
  cnwOverTimeSheet.getRange(todaysRowNumber, 3).setValue(netWorthSheet.getRange("btcCurrentValue").getValue());
  cnwOverTimeSheet.getRange(todaysRowNumber, 4).setValue(netWorthSheet.getRange("kmdCurrentValue").getValue());
  cnwOverTimeSheet.getRange(todaysRowNumber, 5).setValue(netWorthSheet.getRange("xmrCurrentValue").getValue());
  cnwOverTimeSheet.getRange(todaysRowNumber, 6).setValue(netWorthSheet.getRange("bchCurrentValue").getValue());
  cnwOverTimeSheet.getRange(todaysRowNumber, 7).setValue(netWorthSheet.getRange("vtcCurrentValue").getValue());
  cnwOverTimeSheet.getRange(todaysRowNumber, 8).setValue(netWorthSheet.getRange("venCurrentValue").getValue());
  cnwOverTimeSheet.getRange(todaysRowNumber, 9).setValue(netWorthSheet.getRange("pivxCurrentValue").getValue());
  cnwOverTimeSheet.getRange(todaysRowNumber, 11).setValue(netWorthSheet.getRange("arkCurrentValue").getValue());
  cnwOverTimeSheet.getRange(todaysRowNumber, 12).setValue(netWorthSheet.getRange("omgCurrentValue").getValue());
  cnwOverTimeSheet.getRange(todaysRowNumber, 13).setValue(netWorthSheet.getRange("zecCurrentValue").getValue());
  cnwOverTimeSheet.getRange(todaysRowNumber, 14).setValue(netWorthSheet.getRange("qspCurrentValue").getValue());
  cnwOverTimeSheet.getRange(todaysRowNumber, 15).setValue(netWorthSheet.getRange("ethCurrentValue").getValue());
  cnwOverTimeSheet.getRange(todaysRowNumber, 16).setValue(netWorthSheet.getRange("viaCurrentValue").getValue());
  cnwOverTimeSheet.getRange(todaysRowNumber, 17).setValue(netWorthSheet.getRange("ubqCurrentValue").getValue());
  cnwOverTimeSheet.getRange(todaysRowNumber, 18).setValue(netWorthSheet.getRange("lskCurrentValue").getValue());
  cnwOverTimeSheet.getRange(todaysRowNumber, 19).setValue(netWorthSheet.getRange("expCurrentValue").getValue());
  cnwOverTimeSheet.getRange(todaysRowNumber, 20).setValue(netWorthSheet.getRange("dashCurrentValue").getValue());
  cnwOverTimeSheet.getRange(todaysRowNumber, 21).setValue(netWorthSheet.getRange("dogeCurrentValue").getValue());
  cnwOverTimeSheet.getRange(todaysRowNumber, 22).setValue(netWorthSheet.getRange("hsrCurrentValue").getValue());
  cnwOverTimeSheet.getRange(todaysRowNumber, 23).setValue(netWorthSheet.getRange("ltcCurrentValue").getValue());
  cnwOverTimeSheet.getRange(todaysRowNumber, 24).setValue(netWorthSheet.getRange("qtumCurrentValue").getValue());
  cnwOverTimeSheet.getRange(todaysRowNumber, 26).setValue(netWorthSheet.getRange("xlmCurrentValue").getValue());
  cnwOverTimeSheet.getRange(todaysRowNumber, 27).setValue(netWorthSheet.getRange("stratCurrentValue").getValue());
}

The output sheet looks like this:
advnaced2-redacted

The sheet it reads from looks like this:
advnaced-redacted

My rate updating code looks like this:

function updateRates() {
  
  var netWorthSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Net Worth");
  
  var btcUsdRate = getRateForCurrencyId('bitcoin');   
  var kmdUsdRate = getRateForCurrencyId('komodo');
  var xmrUsdRate = getRateForCurrencyId('monero');
  var bchUsdRate = getRateForCurrencyId('bitcoin-cash'); 
  var vtcUsdRate = getRateForCurrencyId('vertcoin');
  var venUsdRate = getRateForCurrencyId('vechain');   
  var pvxUsdRate = getRateForCurrencyId('pivx');   
  var arkUsdRate = getRateForCurrencyId('ark');
  var omgUsdRate = getRateForCurrencyId('omisego');
  var zecUsdRate = getRateForCurrencyId('zcash');
  var qspUsdRate = getRateForCurrencyId('quantstamp');
  var ethUsdRate = getRateForCurrencyId('ethereum');
  var viaUsdRate = getRateForCurrencyId('viacoin');
  var ubqUsdRate = getRateForCurrencyId('ubiq');
  var lskUsdRate = getRateForCurrencyId('lisk');
  var expUsdRate = getRateForCurrencyId('expanse');
  var dashUsdRate = getRateForCurrencyId('dash');
  var dogeUsdRate = getRateForCurrencyId('dogecoin');
  var hsrUsdRate = getRateForCurrencyId('hshare');
  var ltcUsdRate = getRateForCurrencyId('litecoin');
  var qtumUsdRate = getRateForCurrencyId('qtum');
  var xlmUsdRate = getRateForCurrencyId('stellar');
  var stratUsdRate = getRateForCurrencyId('stratis');
  
  
  netWorthSheet.getRange("btcUsdRate").setValue(btcUsdRate);
  netWorthSheet.getRange("kmdUsdRate").setValue(kmdUsdRate);
  netWorthSheet.getRange("xmrUsdRate").setValue(xmrUsdRate);
  netWorthSheet.getRange("bchUsdRate").setValue(bchUsdRate);
  netWorthSheet.getRange("vtcUsdRate").setValue(vtcUsdRate);
  netWorthSheet.getRange("venUsdRate").setValue(venUsdRate);
  netWorthSheet.getRange("pvxUsdRate").setValue(pvxUsdRate);
  netWorthSheet.getRange("arkUsdRate").setValue(arkUsdRate);  
  netWorthSheet.getRange("omgUsdRate").setValue(omgUsdRate);  
  netWorthSheet.getRange("zecUsdRate").setValue(zecUsdRate);  
  netWorthSheet.getRange("qspUsdRate").setValue(qspUsdRate);  
  netWorthSheet.getRange("ethUsdRate").setValue(ethUsdRate);
  netWorthSheet.getRange("viaUsdRate").setValue(viaUsdRate);
  netWorthSheet.getRange("ubqUsdRate").setValue(ubqUsdRate);
  netWorthSheet.getRange("lskUsdRate").setValue(lskUsdRate);
  netWorthSheet.getRange("expUsdRate").setValue(expUsdRate);
  netWorthSheet.getRange("dashUsdRate").setValue(dashUsdRate);
  netWorthSheet.getRange("dogeUsdRate").setValue(dogeUsdRate);
  netWorthSheet.getRange("hsrUsdRate").setValue(hsrUsdRate);
  netWorthSheet.getRange("ltcUsdRate").setValue(ltcUsdRate);
  netWorthSheet.getRange("qtumUsdRate").setValue(qtumUsdRate);
  netWorthSheet.getRange("xlmUsdRate").setValue(xlmUsdRate);
  netWorthSheet.getRange("stratUsdRate").setValue(stratUsdRate);
}


function getRateForCurrencyId(currencyId) {
  
  var url = 'https://api.coinmarketcap.com/v1/ticker/' + currencyId + '/';
  var response = UrlFetchApp.fetch(url, {'muteHttpExceptions': true});
  var json = response.getContentText();
  var data = JSON.parse(json);
  
  return parseFloat(data[0]['price_usd']);
}

Hope this helps.

LesterCovax pushed a commit that referenced this issue Jan 23, 2018
merging to current version
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants