#include <iostream>
#include <vector>
#include <stdexcept>
using namespace std;
struct Asset {
string name;
string type;
double quantity;
double purchase_price;
double current_price;
double transaction_cost;
};
// Initial Investment Formula
double InitialInvestment(double quantity, double purchase_price) {
if (quantity <= 0 || purchase_price < 0) {
throw runtime_error("Error the Quantity must be positive and purchase price cannot be negative.");
}
return quantity * purchase_price;
}
// Current Value Formula
double CurrentValue(double quantity, double current_price) {
if (quantity <= 0 || current_price < 0) {
throw runtime_error("Error the quantity must be positive and current price cannot be negative.");
}
return quantity * current_price;
}
// Net Gain or Loss Formula
double NetGainLoss(double current_value, double initial_investment, double transaction_cost) {
if (transaction_cost < 0) {
throw runtime_error(" Error, the transaction cost cannot be negative.");
}
return current_value - initial_investment - transaction_cost;
}
// Net Return (percent) Formula
double NetReturn(double net_gain, double initial_investment) {
if (initial_investment <= 0) {
throw runtime_error("[Error] Cannot calculate return: initial investment must be greater than zero.");
}
return (net_gain / initial_investment) * 100.0;
}
//ici on definit une formule pour calculer montant total investit qui est en realite la somme
//des investissement initiaux dans chaque actif
double TotalInvested( vector<Asset> portfolio) {
double sum = 0.0;
for (int i = 0; i < portfolio.size(); ++i) {
sum += InitialInvestment(portfolio[i].quantity, portfolio[i].purchase_price);
}
return sum;
}
double CurrentPortfolioValue(vector<Asset> portfolio) {
double sum = 0.0;
for (int i = 0; i < portfolio.size(); ++i) {
sum += CurrentValue(portfolio[i].quantity, portfolio[i].current_price);
}
return sum;
}
//ici pour calculer les cout totaux de transaction ,
//on additionne juste les cours de transaction pour tout es actifs.
double TotalCost(vector<Asset> portfolio) {
double sum = 0.0;
for (int i = 0; i < portfolio.size(); ++i) {
sum += portfolio[i].transaction_coast;
}
return sum;
}
double NetPortfolioResult(vector<Asset> portfolio)
return CurrentValue(portfolio.quantity, portfolio.current_price)-TotalInvested(portfolio)-TotalCost(portfolio) ;
// pour calculer le rendement du porte feuille est le rapport entre la fonction qui calcul le resultat
//net du porte feuille et la fonction qui qui calcule les couts totaux investis.
double PortfolioReturn(vector<Asset> portfolio)
return (NetPortfolioResult(portfolio) /TotalInvested(portfolio) ) * 100.0;