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>`
...