Untitled

 avatar
unknown
javascript
2 years ago
2.2 kB
6
Indexable
const fs = require("fs");

fs.readFile("data.csv", "utf8", function (err, data) {
  if (err) throw err;

  let fileContent = data.split("\n");
  fileContent.shift();

  let parsedData = [];

  fileContent.forEach((transaction) => {
    transaction = transaction.replace(/,/g, ".");
    const transactionDetails = transaction.split(";");

    const parsedTransaction = {
      date: new Date(`${transactionDetails[0]}`),
      transactionType: transactionDetails[2],
      stock: transactionDetails[3],
      amount: +(transactionDetails[4] >= 0
        ? transactionDetails[4]
        : transactionDetails[4] * -1),
      stockprice: +(transactionDetails[5] !== "-" ? transactionDetails[5] : 0),
      courtage: +(transactionDetails[7] !== "-" ? transactionDetails[7] : 0),
      currency: "SEK",
      isin: transactionDetails[9],
    };

    if (!!parsedTransaction) {
      parsedData.push(parsedTransaction);
    }
  });

  let stocks = {};
  let totalTrades = 0;
  let successfulTrades = 0;
  let totalProfitOrLoss = 0;

  parsedData.forEach((parsedTransaction) => {
    let { stock, transactionType, amount, stockprice } = parsedTransaction;

    if (!stocks[stock]) {
      stocks[stock] = {
        amount: 0,
        trades: [],
        profitOrLoss: 0,
      };
    }

    let change = transactionType === "Köp" ? amount : -amount;
    stocks[stock].amount += change;
    stocks[stock].profitOrLoss -= change * stockprice;
    stocks[stock].trades.push(parsedTransaction);

    if (stocks[stock].amount === 0) {
      console.log(`Trade for ${stock}:`, stocks[stock].trades);
      console.log(
        `Profit or loss for this trade: ${stocks[stock].profitOrLoss}`
      );

      totalProfitOrLoss += stocks[stock].profitOrLoss;

      if (stocks[stock].profitOrLoss > 0) {
        successfulTrades++;
      }

      stocks[stock].trades = [];
      stocks[stock].profitOrLoss = 0;
      totalTrades++;
    }
  });

  console.log(`Total number of trades: ${totalTrades}`);
  console.log(`Total profit or loss: ${totalProfitOrLoss}`);
  console.log(
    `Win rate: ${((successfulTrades / totalTrades) * 100).toFixed(2)}%`
  );
});
Editor is loading...