JSFiddle - React, Tailwind, and code Playground

by Eduard Kulikov

HTML

<table id='rates' border=1>
  <tr>
    <th>usdrub</th>
    <th>eurusd</th>
    <th>brn</th>
    <th>balance</th>
  </tr>
</table>

JavaScript

window.rates = {};

$.ajax({
	url: 'https://www.googleapis.com/drive/v2/files/1dbM_hjtFWLVhsjowis4Etii_ZrehDhpZ?alt=media&key=AIzaSyCBcJ2-p0cchYk11378AKJ2y8Ugam2dn9c',
  success: updateRates,
});

function updateRates(rates) {
  console.log(rates);
  
  const buyStep = 2;
  const threshold = 0.0002;
  const countCheckingRates = 10;
  
  let dollars = 100;
  let euros = 100;
  let getBid = idx => rates[idx].data.eurusd.bid;
  let getDiff = (idx1, idx2) => getBid(idx1) - getBid(idx2);
  
  rates.forEach((rate, idx) => {
  	if (!rates[idx-1] || idx < countCheckingRates) return;

    const diff = getDiff(idx, idx-1);
		let summDiff = 0;
    let amplifier = 1;
    
    for(let i = 1; rates[idx-i] && i < countCheckingRates; i++) {
    	summDiff += getDiff(idx, idx-i);
    }
    
    if (Math.abs(summDiff) > threshold * countCheckingRates) {
    	amplifier = 1;
    } else if (Math.abs(summDiff) > threshold * countCheckingRates * 0.75) {
    	amplifier = 5;
    } else if (Math.abs(summDiff) > threshold * countCheckingRates * 0.5) {
    	amplifier = 10;
    } else if (Math.abs(summDiff) > threshold * countCheckingRates * 0.25) {
    	amplifier = 3;
    }

    let buyCount = amplifier * buyStep;
		if (diff > threshold && dollars >= buyCount) {
      euros += convertMoney(buyCount, 1 / rate.data.eurusd.bid);
      dollars -= buyCount;
    } else if (diff < -threshold && euros >= buyCount) {
      dollars += convertMoney(buyCount, rate.data.eurusd.bid);
      euros -= buyCount;
    }

    $('#rates').append(
        `<tr>
          <td>${rate.data.usdrub.bid}</td>
          <td>${rate.data.eurusd.bid} (${round5(diff)}/${round5(summDiff)})</td>
          <td>${rate.data.brn.bid}</td>
          <td style="background: rgb(255,255,${255-amplifier*65})">
            ${round2(euros)}eur 
            + ${round2(dollars)}$ 
            = <b>${convertIntoRubles(dollars, euros, rate)}rub
            / ${convertIntoBrn(dollars, euros, rate)}brn</b>
          </td>
        </tr>`
   ...