# How to do currency exchanging easy to NOT get more money?

## Photo by cottonbro from Pexels

### What is it?

You should exchange some of your money for another currency. Let’s have UAH USD pair. We can exchange 25 UAH for 1 USD on day one. Wait till the exchange rate change and exchange back from USD to UAH. Another day we have a rate like 1 USD for 26 UAH. It is a good one because we can earn 4% from that deal. You shouldn’t think about inflation for now. So now we have 26 UAH. You want to wait until the day when you will get more than 1 USD we would not go decrease our bank. And so on…

### How to prove that this would work?

The best thighs that came to my head were to download 1 year of exchange rates and run this algorithm on this data.

### That’s fine. Can we get more details on this?

Say no more. Start with data. I prepare the list so you can get it [here]. I speak JavaScript so I hope you would understand it too…

``````const fs = require("fs");
const path = require("path");
const csv = require("fast-csv");

// Initial conditions
const states = { UAH2USD: "UAH2USD", USD2UAH: "USD2UAH" };
let uah = 100;
let prevUah = uah;
let usd = 0;
let prevUsd = usd;
let state = states.UAH2USD;

// Loop through the exchange rates list
.on("error", (error) => console.error(error))
.on("data", ({ Buy, Sell }) => {
const sell = parseFloat(Sell);
if (state === states.UAH2USD) {
if (uah / sell > prevUsd) {
usd = uah / sell;
prevUah = uah;
uah = 0;
state = states.USD2UAH;
}
} else if (state === states.USD2UAH) {
if (usd * buy > prevUah) {
prevUsd = usd;
usd = 0;
state = states.UAH2USD;
}
} else {
console.error("???");
}
})
.on("end", (rowCount) => {
console.log(uah);
console.log(usd);
});
``````

### Nice. What results did you get?

Well… We exchange only once and didn’t get a chance to exchange USD back to UAH.

### Should we try another day as a start point?

That is a good question. Give me a second to adjust the algorithm to get the answer.

``````const fs = require("fs");
const path = require("path");
const csv = require("fast-csv");

// Initial conditions
let exchangeRates = [];
let bestUah = 0;

.on("error", (error) => console.error(error))
.on("data", ({ Buy, Sell }) => {
})
.on("end", () => {
for (
let startPoint = 0;
startPoint < exchangeRates.length - 1;
startPoint++
) {
const states = { UAH2USD: "UAH2USD", USD2UAH: "USD2UAH" };
let uah = 100;
let prevUah = uah;
let usd = 0;
let prevUsd = usd;
let state = states.UAH2USD;

for (let i = startPoint; i < exchangeRates.length; i++) {
const sell = parseFloat(exchangeRates[i].Sell);
if (state === states.UAH2USD) {
if (uah / sell > prevUsd) {
usd = uah / sell;
prevUah = uah;
uah = 0;
state = states.USD2UAH;
}
} else if (state === states.USD2UAH) {
if (usd * buy > prevUah) {
prevUsd = usd;
usd = 0;
state = states.UAH2USD;
}
} else {
console.error("???");
}
}

if (
bestUah <
uah + usd * parseFloat(exchangeRates[exchangeRates.length - 1].Buy)
) {
bestUah =
uah + usd * parseFloat(exchangeRates[exchangeRates.length - 1].Buy);
}
}

console.log(bestUah);
});
``````

We will get 100 UAH as the best results, since this is our initial bank I’ll not recommend you to follow this algorithm.

### Cool, I’ll not do this. Anything else?

Yes, I want to know if this algorithm has a name. And do you want to read more about similar things I just have one more idea to explore?

Latest articles

Related articles