Initial commit

This commit is contained in:
fredmaloggia
2026-01-24 07:41:30 +01:00
commit 897507c838
209 changed files with 10265 additions and 0 deletions

View File

@@ -0,0 +1,896 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Data.Analysis;
using MathNet.Numerics.Statistics;
using System.Data;
using LibraryPricer.Models;
using Accord.Statistics.Distributions.Multivariate;
using MathNet.Numerics.RootFinding;
using Accord.Math;
namespace LibraryPricer
{
public class CalcFunctions
{
public static List<PrezziSottostanti> GetCachedEodUnderlyings()
{
return _cachedEodUnderlyings;
}
public static List<UnderlyingStats> ComputeUnderlyingStats(List<PrezziSottostanti> prezziUL)
{
var results = new List<UnderlyingStats>();
foreach (var ul in prezziUL)
{
// Step 1: recupero la serie dei prezzi
double[] prezzi = ul.PrezziClose;
// Step 2: calcolo i rendimenti logaritmici
int n = prezzi.Length;
double[] logReturns = new double[n - 1];
for (int i = 0; i < n - 1; i++)
{
if (prezzi[i] > 0 && prezzi[i + 1] > 0)
logReturns[i] = Math.Log(prezzi[i] / prezzi[i + 1]);
else
logReturns[i] = 0.0; // fallback prudente se cè un errore nei dati
}
// Step 3: calcolo della deviazione standard
double avg = logReturns.Average();
double sumSquared = logReturns.Select(r => Math.Pow(r - avg, 2)).Sum();
double variance = sumSquared / (logReturns.Length - 1);
double stdDev = Math.Sqrt(variance);
// Step 4: annualizzazione (assume 252 giorni di mercato)
double volatilityAnnualized = stdDev * Math.Sqrt(252);
// Step 5: salva tutto nelloggetto
results.Add(new UnderlyingStats
{
Nome = ul.Sottostante,
Prezzi = prezzi,
LogReturns = logReturns,
Volatility = volatilityAnnualized
});
}
return results;
}
//Cache del risultato della query con i prezzi EOD per evitare di farla due volte
private static List<PrezziSottostanti> _cachedEodUnderlyings = new List<PrezziSottostanti>();
//Cache dell'array dei Fair Value per evitare di calcolarlo due volte
private static FairValueResultArray _cachedFairValueArray;
public static FairValueResult FairValue(double[] PricesUL,
double[,] cor_mat,
int numSottostanti,
int num_sims,
double TassoInteresse,
int DaysToMaturity,
double[] Dividends,
double[] Volatility,
int[] DaysToObservation,
double[] DaysToObservationYFract,
double[] CouponValues,
double[] CouponTriggers,
double[] AutocallValues,
double[] AutocallTriggers,
int[] MemoryFlags,
double CouponInMemory,
string? PDI_Style,
double PDI_Strike,
double PDI_Barrier,
double CapitalValue,
double ProtMinVal,
int Airbag,
int Sigma,
int Twinwin,
int Relief,
double FattoreAirbag,
int OneStar,
double TriggerOneStar,
double CAP,
double Leva)
{
double[] PV_Digits = new double[num_sims];
double FairValue = 0;
string CasoFairValue = string.Empty;
FairValueResult fvr = new FairValueResult(); // Istanzio l'oggetto FairValue per ritornare più valori (FairValue,CasoFairValue)
double[][] S_t_mat = new double[DaysToMaturity + 1][];
double[] MinPricesUL = new double[DaysToMaturity + 1];
if (_cachedFairValueArray != null)
{
PV_Digits = _cachedFairValueArray.FairValueArray;
fvr.CasoFairValue = _cachedFairValueArray.CasoFairValue;
}
else
{
for (int i = 0; i < num_sims; i++)
{
S_t_mat = CalcFunctions.GBMMultiEquity(PricesUL, cor_mat, numSottostanti, DaysToMaturity, TassoInteresse, Dividends, Volatility);
// Minimum stock price in % from all observed stock prices
double MinPrice = S_t_mat.SelectMany(x => x).Min();
// Stock price of the Worst performer at maturity
double MinPriceAtMaturity = MinArrayAtRow(S_t_mat, numSottostanti, DaysToMaturity);
double PV_digit = 0;
double memory_coupon = CouponInMemory;
double coupon_paid = 0;
for (int k = 0; k < DaysToObservation.Length; k++)
{
double minByRow = MinArrayAtRow(S_t_mat, numSottostanti, DaysToObservation[k]);
if (minByRow >= AutocallTriggers[k]) // caso rimborso autocall
{
PV_digit = (AutocallValues[k] + memory_coupon) * Math.Exp(-TassoInteresse * DaysToObservationYFract[k]) + coupon_paid;
break;
}
else
if (minByRow >= CouponTriggers[k]) // caso coupon pagato
{
coupon_paid += (CouponValues[k] + memory_coupon) * Math.Exp(-TassoInteresse * DaysToObservationYFract[k]);
memory_coupon = 0;
}
else
{
memory_coupon += (MemoryFlags[k] * CouponValues[k]);
}
// Blocco aggiornato per la gestione dei casi Fair Value
if (k == DaysToObservation.Length - 1)
{
// === CASI GESTITI ===
if (Airbag == 0 && Sigma == 0 && Relief == 0 && Twinwin == 0 && OneStar == 0)
{
PV_digit = CasoStandard(TassoInteresse, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k);
if (String.IsNullOrEmpty(fvr.CasoFairValue)) fvr.CasoFairValue = "Standard";
}
if (Airbag == 1 && Sigma == 0 && Relief == 0 && Twinwin == 0 && OneStar == 0)
{
PV_digit = CasoAirbag(TassoInteresse, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k, FattoreAirbag);
if (String.IsNullOrEmpty(fvr.CasoFairValue)) fvr.CasoFairValue = "Airbag";
}
if (Airbag == 0 && Sigma == 1 && Relief == 0 && Twinwin == 0 && OneStar == 0)
{
PV_digit = CasoSigma(TassoInteresse, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k, PDI_Strike);
if (String.IsNullOrEmpty(fvr.CasoFairValue)) fvr.CasoFairValue = "Sigma";
}
if (Airbag == 0 && Sigma == 0 && Relief == 1 && Twinwin == 0 && OneStar == 0)
{
double SecondMinPriceAtMaturity = SecondMinArrayAtRow(S_t_mat, numSottostanti, DaysToMaturity);
PV_digit = CasoRelief(TassoInteresse, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity, SecondMinPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k);
if (String.IsNullOrEmpty(fvr.CasoFairValue)) fvr.CasoFairValue = "Relief";
}
if (Airbag == 0 && Sigma == 0 && Relief == 0 && Twinwin == 1 && OneStar == 0)
{
PV_digit = CasoTwinWin(TassoInteresse, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k, PDI_Strike,
AutocallTriggers[k], CAP);
if (String.IsNullOrEmpty(fvr.CasoFairValue)) fvr.CasoFairValue = "TwinWin";
}
if (Airbag == 0 && Sigma == 0 && Relief == 0 && Twinwin == 0 && OneStar == 1)
{
double MaxPriceAtMaturity = MaxArrayAtRow(S_t_mat, numSottostanti, DaysToObservation[k]);
PV_digit = CasoOneStar(TassoInteresse, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity, MaxPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k, TriggerOneStar, CouponTriggers, CouponValues);
if (String.IsNullOrEmpty(fvr.CasoFairValue)) fvr.CasoFairValue = "OneStar";
}
// === NUOVI CASI COMBINATI ===
if (Airbag == 1 && Sigma == 0 && Relief == 0 && Twinwin == 0 && OneStar == 1)
{
double MaxPriceAtMaturity = MaxArrayAtRow(S_t_mat, numSottostanti, DaysToObservation[k]);
PV_digit = CasoAirbagOneStar(TassoInteresse, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity, MaxPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k, FattoreAirbag, TriggerOneStar);
if (String.IsNullOrEmpty(fvr.CasoFairValue)) fvr.CasoFairValue = "Airbag + OneStar";
}
if (Airbag == 0 && Sigma == 1 && Relief == 0 && Twinwin == 0 && OneStar == 1)
{
double MaxPriceAtMaturity = MaxArrayAtRow(S_t_mat, numSottostanti, DaysToObservation[k]);
PV_digit = CasoSigmaOneStar(TassoInteresse, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity, MaxPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k, PDI_Strike, TriggerOneStar);
if (String.IsNullOrEmpty(fvr.CasoFairValue)) fvr.CasoFairValue = "Sigma + OneStar";
}
if (Airbag == 0 && Sigma == 0 && Relief == 1 && Twinwin == 0 && OneStar == 1)
{
double SecondMinPriceAtMaturity = SecondMinArrayAtRow(S_t_mat, numSottostanti, DaysToMaturity);
double MaxPriceAtMaturity = MaxArrayAtRow(S_t_mat, numSottostanti, DaysToObservation[k]);
PV_digit = CasoReliefOneStar(TassoInteresse, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity, SecondMinPriceAtMaturity, MaxPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k, TriggerOneStar);
if (String.IsNullOrEmpty(fvr.CasoFairValue)) fvr.CasoFairValue = "Relief + OneStar";
}
if (Airbag == 0 && Sigma == 0 && Relief == 0 && Twinwin == 1 && OneStar == 1)
{
double MaxPriceAtMaturity = MaxArrayAtRow(S_t_mat, numSottostanti, DaysToObservation[k]);
PV_digit = CasoTwinWinOneStar(TassoInteresse, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity, MaxPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k, PDI_Strike, AutocallTriggers[k], CAP, TriggerOneStar);
if (String.IsNullOrEmpty(fvr.CasoFairValue)) fvr.CasoFairValue = "TwinWin + OneStar";
}
if (Airbag == 1 && Sigma == 0 && Relief == 0 && Twinwin == 1 && OneStar == 0)
{
PV_digit = CasoAirbagTwinWin(TassoInteresse, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k,
PDI_Strike, AutocallTriggers[k], CAP, FattoreAirbag);
if (String.IsNullOrEmpty(fvr.CasoFairValue)) fvr.CasoFairValue = "Airbag + TwinWin";
}
}
}
PV_Digits[i] = PV_digit;
}
}
// The Autocallable price is the average of the present value of cash flows from all simulations
fvr.FairValue = PV_Digits.Mean() * 100;
fvr.Stdev = MathNet.Numerics.Statistics.Statistics.StandardDeviation(PV_Digits.Select(x => x * 100));
fvr.Simulations = num_sims;
fvr.FairValueArray = PV_Digits.Select(x => x * 100).ToArray();
return fvr;
}
public static FairValueResultArray FairValueArray(double[] PricesUL,
double[,] cor_mat,
int numSottostanti,
int num_sims,
double TassoInteresse,
int DaysToMaturity,
double[] Dividends,
double[] Volatility,
int[] DaysToObservation,
double[] DaysToObservationYFract,
double[] CouponValues,
double[] CouponTriggers,
double[] AutocallValues,
double[] AutocallTriggers,
int[] MemoryFlags,
double CouponInMemory,
string? PDI_Style,
double PDI_Strike,
double PDI_Barrier,
double CapitalValue,
double ProtMinVal,
int Airbag,
int Sigma,
int Twinwin,
int Relief,
double FattoreAirbag,
int OneStar,
double TriggerOneStar,
double CAP,
double Leva)
{
double FairValue = 0;
string CasoFairValue = string.Empty;
FairValueResultArray fvr = new FairValueResultArray(); // Istanzio l'oggetto FairValue per ritornare più valori (FairValue,CasoFairValue)
double[][] S_t_mat = new double[DaysToMaturity + 1][];
double[] MinPricesUL = new double[DaysToMaturity + 1];
double[] PV_Digits = new double[num_sims];
for (int i = 0; i < num_sims; i++)
{
S_t_mat = CalcFunctions.GBMMultiEquity(PricesUL, cor_mat, numSottostanti, DaysToMaturity, TassoInteresse, Dividends, Volatility);
// Minimum stock price in % from all observed stock prices
double MinPrice = S_t_mat.SelectMany(x => x).Min();
// Stock price of the Worst performer at maturity
double MinPriceAtMaturity = MinArrayAtRow(S_t_mat, numSottostanti, DaysToMaturity);
double PV_digit = 0;
double memory_coupon = CouponInMemory;
double coupon_paid = 0;
for (int k = 0; k < DaysToObservation.Length; k++)
{
double minByRow = MinArrayAtRow(S_t_mat, numSottostanti, DaysToObservation[k]);
if (minByRow >= AutocallTriggers[k]) // caso rimborso autocall
{
PV_digit = (AutocallValues[k] + memory_coupon) * Math.Exp(-TassoInteresse * DaysToObservationYFract[k]) + coupon_paid;
break;
}
else
if (minByRow >= CouponTriggers[k]) // caso coupon pagato
{
coupon_paid += (CouponValues[k] + memory_coupon) * Math.Exp(-TassoInteresse * DaysToObservationYFract[k]);
memory_coupon = 0;
}
else
{
memory_coupon += (MemoryFlags[k] * CouponValues[k]);
}
// Blocco aggiornato per la gestione dei casi Fair Value
if (k == DaysToObservation.Length - 1)
{
// === CASI GESTITI ===
if (Airbag == 0 && Sigma == 0 && Relief == 0 && Twinwin == 0 && OneStar == 0)
{
PV_digit = CasoStandard(TassoInteresse, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k);
if (String.IsNullOrEmpty(fvr.CasoFairValue)) fvr.CasoFairValue = "Standard";
}
if (Airbag == 1 && Sigma == 0 && Relief == 0 && Twinwin == 0 && OneStar == 0)
{
PV_digit = CasoAirbag(TassoInteresse, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k, FattoreAirbag);
if (String.IsNullOrEmpty(fvr.CasoFairValue)) fvr.CasoFairValue = "Airbag";
}
if (Airbag == 0 && Sigma == 1 && Relief == 0 && Twinwin == 0 && OneStar == 0)
{
PV_digit = CasoSigma(TassoInteresse, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k, PDI_Strike);
if (String.IsNullOrEmpty(fvr.CasoFairValue)) fvr.CasoFairValue = "Sigma";
}
if (Airbag == 0 && Sigma == 0 && Relief == 1 && Twinwin == 0 && OneStar == 0)
{
double SecondMinPriceAtMaturity = SecondMinArrayAtRow(S_t_mat, numSottostanti, DaysToMaturity);
PV_digit = CasoRelief(TassoInteresse, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity, SecondMinPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k);
if (String.IsNullOrEmpty(fvr.CasoFairValue)) fvr.CasoFairValue = "Relief";
}
if (Airbag == 0 && Sigma == 0 && Relief == 0 && Twinwin == 1 && OneStar == 0)
{
PV_digit = CasoTwinWin(TassoInteresse, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k, PDI_Strike,
AutocallTriggers[k], CAP);
if (String.IsNullOrEmpty(fvr.CasoFairValue)) fvr.CasoFairValue = "TwinWin";
}
if (Airbag == 0 && Sigma == 0 && Relief == 0 && Twinwin == 0 && OneStar == 1)
{
double MaxPriceAtMaturity = MaxArrayAtRow(S_t_mat, numSottostanti, DaysToObservation[k]);
PV_digit = CasoOneStar(TassoInteresse, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity,
MaxPriceAtMaturity, PV_digit, memory_coupon, coupon_paid, k, TriggerOneStar,
CouponTriggers, CouponValues);
if (String.IsNullOrEmpty(fvr.CasoFairValue)) fvr.CasoFairValue = "OneStar";
}
// === NUOVI CASI COMBINATI ===
if (Airbag == 1 && Sigma == 0 && Relief == 0 && Twinwin == 0 && OneStar == 1)
{
double MaxPriceAtMaturity = MaxArrayAtRow(S_t_mat, numSottostanti, DaysToObservation[k]);
PV_digit = CasoAirbagOneStar(TassoInteresse, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity, MaxPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k, FattoreAirbag, TriggerOneStar);
if (String.IsNullOrEmpty(fvr.CasoFairValue)) fvr.CasoFairValue = "Airbag + OneStar";
}
if (Airbag == 0 && Sigma == 1 && Relief == 0 && Twinwin == 0 && OneStar == 1)
{
double MaxPriceAtMaturity = MaxArrayAtRow(S_t_mat, numSottostanti, DaysToObservation[k]);
PV_digit = CasoSigmaOneStar(TassoInteresse, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity, MaxPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k, PDI_Strike, TriggerOneStar);
if (String.IsNullOrEmpty(fvr.CasoFairValue)) fvr.CasoFairValue = "Sigma + OneStar";
}
if (Airbag == 0 && Sigma == 0 && Relief == 1 && Twinwin == 0 && OneStar == 1)
{
double SecondMinPriceAtMaturity = SecondMinArrayAtRow(S_t_mat, numSottostanti, DaysToMaturity);
double MaxPriceAtMaturity = MaxArrayAtRow(S_t_mat, numSottostanti, DaysToObservation[k]);
PV_digit = CasoReliefOneStar(TassoInteresse, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity, SecondMinPriceAtMaturity, MaxPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k, TriggerOneStar);
if (String.IsNullOrEmpty(fvr.CasoFairValue)) fvr.CasoFairValue = "Relief + OneStar";
}
if (Airbag == 0 && Sigma == 0 && Relief == 0 && Twinwin == 1 && OneStar == 1)
{
double MaxPriceAtMaturity = MaxArrayAtRow(S_t_mat, numSottostanti, DaysToObservation[k]);
PV_digit = CasoTwinWinOneStar(TassoInteresse, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity, MaxPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k, PDI_Strike, AutocallTriggers[k], CAP, TriggerOneStar);
if (String.IsNullOrEmpty(fvr.CasoFairValue)) fvr.CasoFairValue = "TwinWin + OneStar";
}
if (Airbag == 1 && Sigma == 0 && Relief == 0 && Twinwin == 1 && OneStar == 0)
{
PV_digit = CasoAirbagTwinWin(TassoInteresse, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k,
PDI_Strike, AutocallTriggers[k], CAP, FattoreAirbag);
if (String.IsNullOrEmpty(fvr.CasoFairValue)) fvr.CasoFairValue = "Airbag + TwinWin";
}
}
}
PV_Digits[i] = PV_digit;
}
for (int i = 0; i < PV_Digits.Length; i++) PV_Digits[i] = PV_Digits[i] * 100;
fvr.FairValueArray = PV_Digits;
return fvr;
}
public class FairValueResult
{
public double FairValue { get; set; }
public double[] FairValueArray { get; set; } // se serve per Array()
public double Stdev { get; set; } // per confronto GARCH
public int Simulations { get; set; } // per confronto GARCH
public string CasoFairValue { get; set; } // <-- questo ti manca
}
public class FairValueResultArray
{
public double[] FairValueArray { get; set; }
public string? CasoFairValue { get; set;}
}
//private static double CasoOneStar(double r, double[] DaysToObservationYFract, string? PDI_Style, double PDI_Barrier, double CapitalValue, double ProtMinVal, double MinPrice, double MinPriceAtMaturity, double MaxPriceAtMaturity, double PV_digit, double memory_coupon, double coupon_paid, int k, double TriggerOneStar)
//{
// // Barriera Discreta (European)
// if (PDI_Style == "European" && MaxPriceAtMaturity >= TriggerOneStar) // E' Sopra triggeronestar
// {
// PV_digit = (Math.Exp(-r * DaysToObservationYFract[k]) * (CapitalValue + memory_coupon)) + coupon_paid;
// }
// if (PDI_Style == "European" && MaxPriceAtMaturity < TriggerOneStar) // E' sotto triggeronestar
// {
// if (PDI_Style == "European" && MinPriceAtMaturity >= PDI_Barrier) // Non ha rotto barriera
// {
// PV_digit = (Math.Exp(-r * DaysToObservationYFract[k]) * (CapitalValue + memory_coupon)) + coupon_paid;
// }
// if (PDI_Style == "European" && MinPriceAtMaturity < PDI_Barrier) // Ha rotto barriera
// {
// PV_digit = (Math.Max(ProtMinVal, MinPriceAtMaturity / 100)) * Math.Exp(-r * DaysToObservationYFract[k]) + coupon_paid;
// }
// }
// // Barriere Continue (American)
// if (PDI_Style == "American" && MinPrice >= PDI_Barrier) // non ha rotto barriera
// {
// PV_digit = (Math.Exp(-r * DaysToObservationYFract[k]) * (CapitalValue + memory_coupon)) + coupon_paid;
// }
// if (PDI_Style == "American" && MinPrice < PDI_Barrier)
// {
// PV_digit = (Math.Max(ProtMinVal, MinPriceAtMaturity / 100)) * Math.Exp(-r * DaysToObservationYFract[k]) + coupon_paid;
// }
// return PV_digit;
//}
private static double CasoOneStar(double r, double[] DaysToObservationYFract, string? PDI_Style,
double PDI_Barrier, double CapitalValue, double ProtMinVal,
double MinPrice, double MinPriceAtMaturity, double MaxPriceAtMaturity,
double PV_digit, double memory_coupon, double coupon_paid, int k,
double TriggerOneStar, double[] CouponTriggers, double[] CouponValues)
{
double payoutCapitale;
double payoutCedola = 0;
// === CAPITALE ===
if (MinPriceAtMaturity < PDI_Barrier)
{
if (MaxPriceAtMaturity < TriggerOneStar)
{
// Caso: sotto barriera e sotto trigger OneStar → perdita
payoutCapitale = Math.Max(ProtMinVal, MinPriceAtMaturity / 100.0);
}
else
{
// Caso: sotto barriera ma sopra trigger OneStar → capitale protetto
payoutCapitale = CapitalValue;
}
}
else
{
// Caso: sopra barriera → capitale protetto a prescindere
payoutCapitale = CapitalValue;
}
// === CEDOLA ===
if (MinPriceAtMaturity >= CouponTriggers[k])
{
payoutCedola = memory_coupon + CouponValues[k];
}
// === RISULTATO ===
return payoutCapitale * Math.Exp(-r * DaysToObservationYFract[k])
+ payoutCedola * Math.Exp(-r * DaysToObservationYFract[k])
+ coupon_paid;
}
private static double CasoTwinWin(double r, double[] DaysToObservationYFract, string? PDI_Style, double PDI_Barrier, double CapitalValue, double ProtMinVal, double MinPrice, double MinPriceAtMaturity, double PV_digit, double memory_coupon, double coupon_paid, int k , double PDI_Strike, double TriggerAutocall, double CAP)
{
if (PDI_Style == "European" && MinPriceAtMaturity >= PDI_Strike && TriggerAutocall == 999)
{
PV_digit = (Math.Exp(-r * DaysToObservationYFract[k]) * (memory_coupon + (Math.Min(MinPriceAtMaturity / 100,CAP)))) + coupon_paid;
}
// Barriera Discreta (European)
if (PDI_Style == "European" && MinPriceAtMaturity >= PDI_Barrier) // non ha rotto barriera
{
PV_digit = (Math.Exp(-r * DaysToObservationYFract[k]) * ((2 * CapitalValue) + memory_coupon - (MinPriceAtMaturity / 100))) + coupon_paid;
}
if (PDI_Style == "European" && MinPriceAtMaturity < PDI_Barrier)
{
PV_digit = (Math.Max(ProtMinVal, MinPriceAtMaturity / 100)) * Math.Exp(-r * DaysToObservationYFract[k]) + coupon_paid;
}
// Barriere Continue (American)
if (PDI_Style == "American" && MinPriceAtMaturity >= PDI_Strike && TriggerAutocall == 999)
{
PV_digit = (Math.Exp(-r * DaysToObservationYFract[k]) * (memory_coupon + (Math.Min(MinPriceAtMaturity / 100, CAP)))) + coupon_paid;
}
if (PDI_Style == "American" && MinPrice >= PDI_Barrier) // non ha rotto barriera
{
PV_digit = (Math.Exp(-r * DaysToObservationYFract[k]) * ((2 * CapitalValue) + memory_coupon - (MinPriceAtMaturity / 100))) + coupon_paid;
}
if (PDI_Style == "American" && MinPrice < PDI_Barrier)
{
PV_digit = (Math.Max(ProtMinVal, MinPriceAtMaturity / 100)) * Math.Exp(-r * DaysToObservationYFract[k]) + coupon_paid;
}
return PV_digit;
}
private static double CasoRelief(double r, double[] DaysToObservationYFract, string? PDI_Style, double PDI_Barrier, double CapitalValue, double ProtMinVal, double MinPrice, double MinPriceAtMaturity, double SecondMinPriceAtMaturity, double PV_digit, double memory_coupon, double coupon_paid, int k)
{
// Barriera Discreta (European)
if (PDI_Style == "European" && MinPriceAtMaturity >= PDI_Barrier) // non ha rotto barriera
{
PV_digit = (Math.Exp(-r * DaysToObservationYFract[k]) * (CapitalValue + memory_coupon)) + coupon_paid;
}
if (PDI_Style == "European" && MinPriceAtMaturity < PDI_Barrier)
{
PV_digit = (Math.Max(ProtMinVal, SecondMinPriceAtMaturity / 100)) * Math.Exp(-r * DaysToObservationYFract[k]) + coupon_paid;
}
// Barriere Continue (American)
if (PDI_Style == "American" && MinPrice >= PDI_Barrier) // non ha rotto barriera
{
PV_digit = (Math.Exp(-r * DaysToObservationYFract[k]) * (CapitalValue + memory_coupon)) + coupon_paid;
}
if (PDI_Style == "American" && MinPrice < PDI_Barrier)
{
PV_digit = (Math.Max(ProtMinVal, SecondMinPriceAtMaturity / 100)) * Math.Exp(-r * DaysToObservationYFract[k]) + coupon_paid;
}
return PV_digit;
}
private static double CasoSigma(double r, double[] DaysToObservationYFract, string? PDI_Style, double PDI_Barrier, double CapitalValue, double ProtMinVal, double MinPrice, double MinPriceAtMaturity, double PV_digit, double memory_coupon, double coupon_paid, int k, double PDI_Strike)
{
// Barriera Discreta (European)
if (PDI_Style == "European" && MinPriceAtMaturity >= PDI_Barrier) // non ha rotto barriera
{
PV_digit = (Math.Exp(-r * DaysToObservationYFract[k]) * (CapitalValue + memory_coupon)) + coupon_paid;
}
if (PDI_Style == "European" && MinPriceAtMaturity < PDI_Barrier)
{
PV_digit = (Math.Max(ProtMinVal, (MinPriceAtMaturity + PDI_Strike - PDI_Barrier) / 100)) * Math.Exp(-r * DaysToObservationYFract[k]) + coupon_paid;
}
// Barriere Continue (American)
if (PDI_Style == "American" && MinPrice >= PDI_Barrier) // non ha rotto barriera
{
PV_digit = (Math.Exp(-r * DaysToObservationYFract[k]) * (CapitalValue + memory_coupon)) + coupon_paid;
}
if (PDI_Style == "American" && MinPrice < PDI_Barrier)
{
PV_digit = (Math.Max(ProtMinVal, (MinPriceAtMaturity + PDI_Strike - PDI_Barrier) / 100)) * Math.Exp(-r * DaysToObservationYFract[k]) + coupon_paid;
}
return PV_digit;
}
private static double CasoAirbag(double r, double[] DaysToObservationYFract, string? PDI_Style, double PDI_Barrier, double CapitalValue, double ProtMinVal, double MinPrice, double MinPriceAtMaturity, double PV_digit, double memory_coupon, double coupon_paid, int k, double FattoreAirbag)
{
// Barriera Discreta (European)
if (PDI_Style == "European" && MinPriceAtMaturity >= PDI_Barrier) // non ha rotto barriera
{
PV_digit = (Math.Exp(-r * DaysToObservationYFract[k]) * (CapitalValue + memory_coupon)) + coupon_paid;
}
if (PDI_Style == "European" && MinPriceAtMaturity < PDI_Barrier)
{
PV_digit = (Math.Max(ProtMinVal, MinPriceAtMaturity / 100)) * Math.Exp(-r * DaysToObservationYFract[k]) * FattoreAirbag + coupon_paid;
}
// Barriere Continue (American)
if (PDI_Style == "American" && MinPrice >= PDI_Barrier) // non ha rotto barriera
{
PV_digit = (Math.Exp(-r * DaysToObservationYFract[k]) * (CapitalValue + memory_coupon)) + coupon_paid;
}
if (PDI_Style == "American" && MinPrice < PDI_Barrier)
{
PV_digit = (Math.Max(ProtMinVal, MinPriceAtMaturity / 100)) * Math.Exp(-r * DaysToObservationYFract[k]) * FattoreAirbag + coupon_paid;
}
return PV_digit;
}
// === DEFINIZIONI DEI METODI COMBINATI ===
private static double CasoAirbagOneStar(double r, double[] DaysToObservationYFract, string? PDI_Style,
double PDI_Barrier, double CapitalValue, double ProtMinVal, double MinPrice, double MinPriceAtMaturity,
double MaxPriceAtMaturity, double PV_digit, double memory_coupon, double coupon_paid, int k,
double FattoreAirbag, double TriggerOneStar)
{
if (MaxPriceAtMaturity >= TriggerOneStar)
return (Math.Exp(-r * DaysToObservationYFract[k]) * (CapitalValue + memory_coupon)) + coupon_paid;
return CasoAirbag(r, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k, FattoreAirbag);
}
private static double CasoSigmaOneStar(double r, double[] DaysToObservationYFract, string? PDI_Style,
double PDI_Barrier, double CapitalValue, double ProtMinVal, double MinPrice, double MinPriceAtMaturity,
double MaxPriceAtMaturity, double PV_digit, double memory_coupon, double coupon_paid, int k,
double PDI_Strike, double TriggerOneStar)
{
if (MaxPriceAtMaturity >= TriggerOneStar)
return (Math.Exp(-r * DaysToObservationYFract[k]) * (CapitalValue + memory_coupon)) + coupon_paid;
return CasoSigma(r, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k, PDI_Strike);
}
private static double CasoReliefOneStar(double r, double[] DaysToObservationYFract, string? PDI_Style,
double PDI_Barrier, double CapitalValue, double ProtMinVal, double MinPrice, double MinPriceAtMaturity,
double SecondMinPriceAtMaturity, double MaxPriceAtMaturity, double PV_digit, double memory_coupon,
double coupon_paid, int k, double TriggerOneStar)
{
if (MaxPriceAtMaturity >= TriggerOneStar)
return (Math.Exp(-r * DaysToObservationYFract[k]) * (CapitalValue + memory_coupon)) + coupon_paid;
return CasoRelief(r, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity, SecondMinPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k);
}
private static double CasoTwinWinOneStar(double r, double[] DaysToObservationYFract, string? PDI_Style,
double PDI_Barrier, double CapitalValue, double ProtMinVal, double MinPrice, double MinPriceAtMaturity,
double MaxPriceAtMaturity, double PV_digit, double memory_coupon, double coupon_paid, int k,
double PDI_Strike, double AutocallTrigger, double CAP, double TriggerOneStar)
{
if (MaxPriceAtMaturity >= TriggerOneStar)
return (Math.Exp(-r * DaysToObservationYFract[k]) * (CapitalValue + memory_coupon)) + coupon_paid;
return CasoTwinWin(r, DaysToObservationYFract, PDI_Style, PDI_Barrier,
CapitalValue, ProtMinVal, MinPrice, MinPriceAtMaturity,
PV_digit, memory_coupon, coupon_paid, k,
PDI_Strike, AutocallTrigger, CAP);
}
private static double CasoAirbagTwinWin(double r, double[] DaysToObservationYFract, string? PDI_Style,
double PDI_Barrier, double CapitalValue, double ProtMinVal, double MinPrice, double MinPriceAtMaturity,
double PV_digit, double memory_coupon, double coupon_paid, int k,
double PDI_Strike, double AutocallTrigger, double CAP, double FattoreAirbag)
{
if (MinPriceAtMaturity >= PDI_Barrier)
{
if (AutocallTrigger == 999 && MinPriceAtMaturity >= PDI_Strike)
{
return (Math.Exp(-r * DaysToObservationYFract[k]) * (memory_coupon + Math.Min(MinPriceAtMaturity / 100, CAP))) + coupon_paid;
}
return (Math.Exp(-r * DaysToObservationYFract[k]) * ((2 * CapitalValue) + memory_coupon - (MinPriceAtMaturity / 100))) + coupon_paid;
}
return (Math.Max(ProtMinVal, MinPriceAtMaturity / 100)) * Math.Exp(-r * DaysToObservationYFract[k]) * FattoreAirbag + coupon_paid;
}
private static double CasoStandard(double r, double[] DaysToObservationYFract, string? PDI_Style, double PDI_Barrier, double CapitalValue, double ProtMinVal, double MinPrice, double MinPriceAtMaturity, double PV_digit, double memory_coupon, double coupon_paid, int k)
{
// Barriera Discreta (European)
if (PDI_Style == "European" && MinPriceAtMaturity >= PDI_Barrier) // non ha rotto barriera
{
PV_digit = (Math.Exp(-r * DaysToObservationYFract[k]) * (CapitalValue + memory_coupon)) + coupon_paid;
}
if (PDI_Style == "European" && MinPriceAtMaturity < PDI_Barrier)
{
PV_digit = (Math.Max(ProtMinVal, MinPriceAtMaturity / 100)) * Math.Exp(-r * DaysToObservationYFract[k]) + coupon_paid;
}
// Barriere Continue (American)
if (PDI_Style == "American" && MinPrice >= PDI_Barrier) // non ha rotto barriera
{
PV_digit = (Math.Exp(-r * DaysToObservationYFract[k]) * (CapitalValue + memory_coupon)) + coupon_paid;
}
if (PDI_Style == "American" && MinPrice < PDI_Barrier)
{
PV_digit = (Math.Max(ProtMinVal, MinPriceAtMaturity / 100)) * Math.Exp(-r * DaysToObservationYFract[k]) + coupon_paid;
}
return PV_digit;
}
public static double[][] GBMMultiEquity(double[] PricesUL, double[,] cor_mat, int numSottostanti, int DaysToMaturity, double TassoInteresse, double[] q_assets, double[] vol_assets)
{
double dt = 1.0 / 252.0; // "daily"
// Dataframe containing the correlated random variables from a standard normal distribution used in the GBM
double[] mean = Enumerable.Repeat(0.0, numSottostanti).ToArray();
var dist = new MultivariateNormalDistribution(mean, cor_mat);
// Generate samples from this distribution:
double[][] df_W = dist.Generate(DaysToMaturity);
double[][] df_S = new double[DaysToMaturity + 1][]; // aggiunto +1 per considerare la riga dei prezzi aggiunta a df_S nel ciclo successivo // https://stackoverflow.com/questions/40333403/the-difference-between-and-in-c-sharp
for (int k = 0; k < DaysToMaturity + 1; k++)
{
df_S[k] = new double[numSottostanti];
}
// Assegna nella prima riga della matrice df_S i prices UL
for (int i = 0; i < numSottostanti; i++)
{
df_S[0][i] = PricesUL[i];
}
// Elabora il resto della matride df_S partendo da 1 fino a num_steps (incluso)
for (int i = 0; i < numSottostanti; i++)
{
double drift = ((TassoInteresse - q_assets[i]) - (0.5 * (Math.Pow(vol_assets[i],2))));
double[] tempArray = new double[DaysToMaturity];
for (int j = 0; j < DaysToMaturity; j++)
{
tempArray[j] = (drift * dt) + (vol_assets[i] * Math.Sqrt(dt) * df_W[j][i]);
}
double[] cumSumArray = new double[DaysToMaturity];
cumSumArray = CumulativeSums(tempArray);
for (int k = 1; k < DaysToMaturity + 1; k++)
{
df_S[k][i] = PricesUL[i] * Math.Exp(cumSumArray[k-1]);
}
}
return df_S;
}
public static double MaxArrayAtRow(double[][] jaggedArray, int numSottostanti, int RowIndex)
{
double value = -999999;
for (int j = 0; j < numSottostanti; j++)
{
if (jaggedArray[RowIndex][j] > value) value = jaggedArray[RowIndex][j];
}
return (value);
}
public static double MinArrayAtRow(double[][] jaggedArray, int numSottostanti, int RowIndex)
{
double value = 999999;
for (int j = 0; j < numSottostanti; j++)
{
if (jaggedArray[RowIndex][j] < value) value = jaggedArray[RowIndex][j];
}
return (value);
}
public static double SecondMinArrayAtRow(double[][] jaggedArray, int numSottostanti, int RowIndex)
{
double value = 999999;
double[] tempArray = new double[numSottostanti];
for (int j = 0; j < numSottostanti; j++)
{
tempArray[j] = jaggedArray[RowIndex][j];
}
tempArray.Sort(true,true); // Ordina i prezzi a scadenza in modo crescente (il primo parametro stable = true preserva l'ordine nel caso siano due numeri uguali nella sequenza)
if (tempArray.Length >= 2) value = tempArray[1]; // prende il secondo più piccolo
else value = tempArray[0]; // prende l'unico elemento esistente
return (value);
}
public static double[] CumulativeSums(double[] values)
{
if (values == null || values.Length == 0) return new double[0];
var results = new double[values.Length];
results[0] = values[0];
for (var i = 1; i < values.Length; i++)
{
results[i] = results[i - 1] + values[i];
}
return results;
}
/// <summary>
/// Calcola la deviazione standard a partire da una List di valori
/// </summary>
/// <param name="values"> La lista dei valori da cui ricavare la deviazione standard </param>
/// <returns></returns>
public static double StandardDeviation(double[] valori)
{
List<double> values = new List<double>();
values.AddRange(valori);
double average = values.Average();
double sumOfDerivation = 0;
foreach (double value in values)
{
sumOfDerivation += (value) * (value);
}
double sumOfDerivationAverage = sumOfDerivation / (values.Count - 1);
return Math.Sqrt(sumOfDerivationAverage - (average * average));
}
/// <summary>
/// Calcola la volatilità dei sottostanti a partire dall'ISIN del certificato
/// </summary>
/// <param name="ISIN">ISIN del certificato da cui verranno recuperati i sottostanti</param>
/// <param name="numPrezziEOD">Il numero di prezzi da considerare</param>
/// <param name="EnableWarning">Se true, consente di riprodurre un messaggio di warning nel caso onn siano reperibili abbastanza prezzi</param>
/// <returns>Un array di double con un valore per ogni sottostante</returns>
public static DataTable ArraytoDatatable(double[,] numbers, string[] columnNames)
{
DataTable dt = new DataTable();
for (int i = 0; i < numbers.GetLength(1); i++)
{
//dt.Columns.Add("Column" + (i + 1));
dt.Columns.Add(columnNames[i]);
}
for (var i = 0; i < numbers.GetLength(0); ++i)
{
DataRow row = dt.NewRow();
for (var j = 0; j < numbers.GetLength(1); ++j)
{
row[j] = Math.Round(numbers[i, j],4);
}
dt.Rows.Add(row);
}
return dt;
}
public static DataTable ArrayJaddedtoDatatable(double[][] numbers, string[] columnNames)
{
DataTable dt = new DataTable();
for (int i = 0; i < columnNames.Length; i++)
{
dt.Columns.Add(columnNames[i]);
}
for (var i = 0; i < numbers.GetLength(0); ++i)
{
DataRow row = dt.NewRow();
for (var j = 0; j < columnNames.Length; ++j)
{
row[j] = Math.Round(numbers[i][j],4);
}
dt.Rows.Add(row);
}
return dt;
}
}
}

View File

@@ -0,0 +1,57 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
// ref link: http://dontcodetired.com/blog/post/Creating-a-Spinner-Animation-in-a-Console-Application-in-C
namespace LibraryPricer
{
/* non funziona bene
//var s = new ConsoleSpinner();
//double fv = 0;
//while (fv == 0)
//{
// //Thread.Sleep(100); // simulate some work being done
// fv = CalcFunctions.FairValue(PricesUL, corrMatrix, numSottostanti, num_sims, r, DaysToMaturity, Dividends, Volatility, DaysToObservation, DaysToObservationYFract, CouponValues, CouponTriggers, AutocallValues, AutocallTriggers, MemoryFlags, PDI_Style, PDI_Strike, PDI_Barrier, CapitalValue);
// s.UpdateProgress();
//}
*/
public class ConsoleSpinner
{
private int _currentAnimationFrame;
public ConsoleSpinner()
{
SpinnerAnimationFrames = new[]
{
'|',
'/',
'-',
'\\'
};
}
public char[] SpinnerAnimationFrames { get; set; }
public void UpdateProgress()
{
// Store the current position of the cursor
var originalX = Console.CursorLeft;
var originalY = Console.CursorTop;
// Write the next frame (character) in the spinner animation
Console.Write(SpinnerAnimationFrames[_currentAnimationFrame]);
// Keep looping around all the animation frames
_currentAnimationFrame++;
if (_currentAnimationFrame == SpinnerAnimationFrames.Length)
{
_currentAnimationFrame = 0;
}
// Restore cursor to original position
Console.SetCursorPosition(originalX, originalY);
}
}
}

View File

@@ -0,0 +1,382 @@
using ConsoleTableExt;
using LibraryPricer.Payoffs;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;
namespace LibraryPricer
{
public static class FairValueComparison
{
public static PayoffContext CloneContext(PayoffContext original)
{
return new PayoffContext
{
DaysToMaturity = original.DaysToMaturity,
r = original.r,
CapitalValue = original.CapitalValue,
ProtMinVal = original.ProtMinVal,
PDI_Barrier = original.PDI_Barrier,
PDI_Style = original.PDI_Style,
CouponInMemory = original.CouponInMemory,
DaysToObsYFract = (double[])original.DaysToObsYFract.Clone(),
CouponTriggers = (double[])original.CouponTriggers.Clone(),
CouponValues = (double[])original.CouponValues.Clone(),
AutocallTriggers = (double[])original.AutocallTriggers.Clone(),
AutocallValues = (double[])original.AutocallValues.Clone(),
MemoryFlags = (int[])original.MemoryFlags.Clone(),
Caso = original.Caso,
PDI_Strike = original.PDI_Strike,
FattoreAirbag = original.FattoreAirbag,
TriggerOneStar = original.TriggerOneStar,
CAP = original.CAP,
DaysToObs = (int[])original.DaysToObs.Clone(),
Airbag = original.Airbag,
Sigma = original.Sigma,
Relief = original.Relief,
TwinWin = original.TwinWin,
OneStar = original.OneStar,
Leva = original.Leva,
Volatility = (double[])original.Volatility.Clone(),
PricesUL = (double[])original.PricesUL.Clone(),
NominalAmount = original.NominalAmount
};
}
public static void CompareFairValues(
int numSimulations,
double[][] pricesUL,
double[,] corrMatrix,
int numAssets,
int daysToMaturity,
double r,
double[] dividends,
PayoffContext context,
double nominalAmount,
string isin,
double ask,
double bid,
DateTime lastDate,
string category,
DateTime[]? obsDates = null)
{
Console.WriteLine($"Motore GBM con payoff engine '{context.Caso}'");
var payoffEvaluator = PayoffFactory.GetEvaluator(context.Caso);
double[] results = new double[numSimulations];
int barrierBreaksAtMaturity = 0;
int autocallFirstObsIndex = -1;
double autocallFirstTrigger = 0.0;
int autocallAtFirstObsCount = 0;
int oneStarObsIndex = -1;
int oneStarTriggerHits = 0;
if (context.AutocallTriggers != null && context.DaysToObs != null)
{
for (int k = 0; k < context.AutocallTriggers.Length && k < context.DaysToObs.Length; k++)
{
double trigger = context.AutocallTriggers[k];
if (trigger != 999 && trigger != 0)
{
autocallFirstObsIndex = k;
autocallFirstTrigger = trigger;
break;
}
}
}
if (autocallFirstObsIndex < 0 && context.AutocallTriggers != null && context.DaysToObs != null && context.AutocallValues != null)
{
for (int k = 0; k < context.AutocallTriggers.Length && k < context.DaysToObs.Length && k < context.AutocallValues.Length; k++)
{
double trigger = context.AutocallTriggers[k];
if (trigger != 999 && context.AutocallValues[k] > 0)
{
autocallFirstObsIndex = k;
autocallFirstTrigger = trigger;
break;
}
}
}
if (context.OneStar == 1 && context.DaysToObs != null && context.DaysToObs.Length > 0 && context.TriggerOneStar > 0)
{
oneStarObsIndex = context.DaysToObs.Length - 1;
}
for (int i = 0; i < numSimulations; i++)
{
try
{
var path = CalcFunctions.GBMMultiEquity(
pricesUL[i],
corrMatrix,
numAssets,
daysToMaturity,
r,
dividends,
context.Volatility
);
if (context.PDI_Barrier > 0)
{
double minAtMaturity = CalcFunctions.MinArrayAtRow(path, numAssets, daysToMaturity);
if (minAtMaturity < context.PDI_Barrier)
{
barrierBreaksAtMaturity++;
}
}
if (autocallFirstObsIndex >= 0)
{
int obsDay = context.DaysToObs[autocallFirstObsIndex];
double minAtObs = CalcFunctions.MinArrayAtRow(path, numAssets, obsDay);
if (minAtObs >= autocallFirstTrigger)
{
autocallAtFirstObsCount++;
}
}
if (oneStarObsIndex >= 0)
{
int obsDay = context.DaysToObs[oneStarObsIndex];
double maxAtObs = CalcFunctions.MaxArrayAtRow(path, numAssets, obsDay);
if (maxAtObs >= context.TriggerOneStar)
{
oneStarTriggerHits++;
}
}
var payoff = payoffEvaluator.Evaluate(path, context);
results[i] = payoff * 100.0;
}
catch (Exception ex)
{
Console.WriteLine($"[SIM {i}] Errore: {ex.Message}");
results[i] = 0.0;
}
}
double sum = results.Sum();
double mean = sum / numSimulations;
double variance = results.Select(val => Math.Pow(val - mean, 2)).Sum() / numSimulations;
double stddev = Math.Sqrt(variance);
double fairValueScaled = mean * nominalAmount / 100.0;
int[] fairValues = results.Select(x => (int)Math.Floor(x * nominalAmount / 100)).ToArray();
// Report sintetico in console (senza dipendenze esterne)
Console.WriteLine($"Caso calcolo Fair value {isin} = {category}");
Console.WriteLine($"Fair value {isin} ({numSimulations} iter.) = {fairValueScaled:F2} (Bid = {bid:F2}, Ask = {ask:F2}, Last updated on {lastDate:dd/MM/yyyy HH:mm:ss})");
if (context.PDI_Barrier > 0)
{
double pctBarrierBreak = 100.0 * barrierBreaksAtMaturity / Math.Max(1, numSimulations);
Console.WriteLine($"Probabilita rottura barriera a scadenza: {pctBarrierBreak:F2}% (Barriera {context.PDI_Barrier:F4})");
}
if (autocallFirstObsIndex >= 0)
{
double pctAutocallFirstObs = 100.0 * autocallAtFirstObsCount / Math.Max(1, numSimulations);
string obsLabel = (obsDates != null && autocallFirstObsIndex < obsDates.Length)
? obsDates[autocallFirstObsIndex].ToString("dd/MM/yyyy")
: context.DaysToObs[autocallFirstObsIndex].ToString();
Console.WriteLine($"Probabilita rimborso anticipato alla prima osservazione autocall: {pctAutocallFirstObs:F2}% (Trigger {autocallFirstTrigger:F4}, Obs {obsLabel})");
}
else
{
Console.WriteLine("Probabilita rimborso anticipato alla prima osservazione autocall: N/D (nessun trigger autocall valorizzato)");
}
if (oneStarObsIndex >= 0)
{
double pctOneStar = 100.0 * oneStarTriggerHits / Math.Max(1, numSimulations);
string obsLabel = (obsDates != null && oneStarObsIndex < obsDates.Length)
? obsDates[oneStarObsIndex].ToString("dd/MM/yyyy")
: context.DaysToObs[oneStarObsIndex].ToString();
Console.WriteLine($"Probabilita attivazione OneStar: {pctOneStar:F2}% (Trigger {context.TriggerOneStar:F4}, Obs {obsLabel})");
}
double referencePrice = ask > 0 ? ask : (bid > 0 ? bid : 0.0);
string referenceLabel = ask > 0 ? "Ask" : "Bid";
if (referencePrice > 0)
{
double[] above = fairValues.Where(v => v >= referencePrice).Select(v => (double)v).ToArray();
double[] below = fairValues.Where(v => v < referencePrice).Select(v => (double)v).ToArray();
double pctAbove = 100.0 * above.Length / Math.Max(1, fairValues.Length);
double pctBelow = 100.0 * below.Length / Math.Max(1, fairValues.Length);
Console.WriteLine($"Sopra {referenceLabel} nel {pctAbove:F2}% dei casi, sotto {referenceLabel} nel {pctBelow:F2}% dei casi");
double avgAbove = above.Length > 0 ? above.Average() : 0.0;
double avgBelow = below.Length > 0 ? below.Average() : 0.0;
Console.WriteLine($"Valore medio casi sopra {referenceLabel}: {avgAbove:F2}");
Console.WriteLine($"Valore medio casi sotto {referenceLabel}: {avgBelow:F2}");
double gainAvg = avgAbove - referencePrice;
double lossAvg = referencePrice - avgBelow;
Console.WriteLine($"Gain medio: {avgAbove:F2} - {referencePrice:F2} = {gainAvg:F2}");
Console.WriteLine($"Loss medio: {referencePrice:F2} - {avgBelow:F2} = {lossAvg:F2}");
double pctGain = referencePrice > 0 ? 100.0 * gainAvg / referencePrice : 0.0;
double pctLoss = referencePrice > 0 ? 100.0 * lossAvg / referencePrice : 0.0;
Console.WriteLine($"Perc media Gain: {gainAvg:F2} / {referencePrice:F2} = {pctGain:F2}%");
Console.WriteLine($"Perc media Loss: {lossAvg:F2} / {referencePrice:F2} = {pctLoss:F2}%");
double expectedValue = (gainAvg * (pctAbove / 100.0)) - (lossAvg * (pctBelow / 100.0));
Console.WriteLine($"Expected value: {expectedValue:F2}");
double[] returnsPct = fairValues.Select(v => 100.0 * (v - referencePrice) / referencePrice).ToArray();
if (returnsPct.Length > 0)
{
double minRet = returnsPct.Min();
double maxRet = returnsPct.Max();
if (Math.Abs(maxRet - minRet) < 1e-9)
{
Console.WriteLine($"Distribuzione rendimenti vs {referenceLabel}: tutti i casi {returnsPct[0]:F2}%");
}
else
{
Console.WriteLine($"Distribuzione rendimenti vs {referenceLabel} (10 bins):");
int bins = 10;
double width = (maxRet - minRet) / bins;
int[] counts = new int[bins];
foreach (double ret in returnsPct)
{
int idx = (int)Math.Floor((ret - minRet) / width);
if (idx >= bins) idx = bins - 1;
if (idx < 0) idx = 0;
counts[idx]++;
}
int maxCount = counts.Max();
for (int b = 0; b < bins; b++)
{
double start = minRet + b * width;
double end = (b == bins - 1) ? maxRet : (start + width);
int count = counts[b];
double pct = 100.0 * count / Math.Max(1, returnsPct.Length);
int barLen = maxCount > 0 ? (int)Math.Round(50.0 * count / maxCount) : 0;
string bar = new string('#', barLen);
Console.WriteLine($"[{start,7:F2}% .. {end,7:F2}%] {count,5} ({pct,5:F2}%) | {bar}");
}
string safeLabel = referenceLabel.Replace(" ", "");
string fileName = $"returns_hist_{isin}_{safeLabel}.png";
string outDir = Path.Combine(GetProjectRoot(), "output");
Directory.CreateDirectory(outDir);
string outPath = Path.Combine(outDir, fileName);
WriteHistogramPng(outPath, minRet, maxRet, counts, referenceLabel, isin);
Console.WriteLine($"Plot salvato: {outPath}");
}
}
}
}
private static void WriteHistogramPng(string path, double minRet, double maxRet, int[] counts, string referenceLabel, string isin)
{
const int width = 900;
const int height = 520;
const int marginLeft = 70;
const int marginRight = 30;
const int marginTop = 50;
const int marginBottom = 90;
int bins = counts.Length;
int maxCount = counts.Max();
double plotWidth = width - marginLeft - marginRight;
double plotHeight = height - marginTop - marginBottom;
double barWidth = plotWidth / Math.Max(1, bins);
double range = Math.Max(1e-9, maxRet - minRet);
using var bmp = new Bitmap(width, height);
using var g = Graphics.FromImage(bmp);
g.Clear(Color.White);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
using var axisPen = new Pen(Color.FromArgb(51, 51, 51), 1);
using var textBrush = new SolidBrush(Color.FromArgb(51, 51, 51));
using var titleBrush = new SolidBrush(Color.FromArgb(17, 17, 17));
using var blueBrush = new SolidBrush(Color.FromArgb(74, 123, 209));
using var redBrush = new SolidBrush(Color.FromArgb(209, 100, 74));
using var fontTitle = new Font("Segoe UI", 14);
using var fontLabel = new Font("Segoe UI", 10);
using var fontTick = new Font("Segoe UI", 9);
g.DrawString($"Distribuzione rendimenti vs {referenceLabel} - {isin}", fontTitle, titleBrush, marginLeft, 20);
// Axes
g.DrawLine(axisPen, marginLeft, marginTop, marginLeft, height - marginBottom);
g.DrawLine(axisPen, marginLeft, height - marginBottom, width - marginRight, height - marginBottom);
// Bars
for (int i = 0; i < bins; i++)
{
double ratio = maxCount > 0 ? (double)counts[i] / maxCount : 0.0;
double barHeight = ratio * plotHeight;
double x = marginLeft + i * barWidth + 2;
double y = (height - marginBottom) - barHeight;
double bw = Math.Max(1, barWidth - 4);
double binCenter = minRet + (i + 0.5) * (range / bins);
var brush = binCenter < 0 ? redBrush : blueBrush;
g.FillRectangle(brush, (float)x, (float)y, (float)bw, (float)barHeight);
}
// X-axis labels (min, 0 if in range, max)
g.DrawString($"{minRet:F2}%", fontLabel, textBrush, marginLeft, height - marginBottom + 35);
if (minRet < 0 && maxRet > 0)
{
double xZero = marginLeft + ((0 - minRet) / range) * plotWidth;
using var dashPen = new Pen(Color.FromArgb(153, 153, 153), 1);
dashPen.DashPattern = new float[] { 4, 3 };
g.DrawLine(dashPen, (float)xZero, marginTop, (float)xZero, height - marginBottom);
g.DrawString("0%", fontLabel, textBrush, (float)(xZero - 10), height - marginBottom + 35);
}
g.DrawString($"{maxRet:F2}%", fontLabel, textBrush, width - marginRight - 60, height - marginBottom + 35);
g.DrawString("Rendimento (%)", fontLabel, textBrush, width - marginRight - 140, height - 25);
// Y-axis labels (0 and max)
g.DrawString("0", fontLabel, textBrush, marginLeft - 25, height - marginBottom - 5);
g.DrawString($"{maxCount}", fontLabel, textBrush, marginLeft - 35, marginTop - 5);
g.DrawString("Conteggi", fontLabel, textBrush, marginLeft - 55, marginTop - 25);
// Bin labels
using var centerFormat = new StringFormat { Alignment = StringAlignment.Center };
for (int i = 0; i < bins; i++)
{
double start = minRet + i * (range / bins);
double end = (i == bins - 1) ? maxRet : (start + (range / bins));
string label = $"{start:F1}..{end:F1}%";
float x = (float)(marginLeft + i * barWidth + barWidth / 2);
float y = height - marginBottom + 55;
g.DrawString(label, fontTick, textBrush, x, y, centerFormat);
}
bmp.Save(path, ImageFormat.Png);
}
private static string GetProjectRoot()
{
DirectoryInfo? dir = new DirectoryInfo(Directory.GetCurrentDirectory());
while (dir != null)
{
bool hasSln = dir.EnumerateFiles("*.sln").Any();
bool hasPricer = Directory.Exists(Path.Combine(dir.FullName, "Pricer"));
bool hasLibrary = Directory.Exists(Path.Combine(dir.FullName, "LibraryPricer"));
if (hasSln || (hasPricer && hasLibrary))
{
return dir.FullName;
}
dir = dir.Parent;
}
return Directory.GetCurrentDirectory();
}
}
}

View File

@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibraryPricer
{
public class FairValues
{
public string ISIN { get; set; }
public double FairValue { get; set; }
}
}

View File

@@ -0,0 +1,40 @@
using System;
using System.Linq;
namespace LibraryPricer.Engines
{
public static class GbmEngine
{
public static double RunSimulation(
double[] pricesUL,
double[,] corrMatrix,
int numAssets,
int daysToMaturity,
int numSimulations,
double rate,
double[] dividends,
double[] volatilities,
Payoffs.PayoffContext context)
{
double[] results = new double[numSimulations];
var evaluator = Payoffs.PayoffFactory.GetEvaluator(context.Caso);
for (int i = 0; i < numSimulations; i++)
{
var path = CalcFunctions.GBMMultiEquity(
pricesUL,
corrMatrix,
numAssets,
daysToMaturity,
rate,
dividends,
volatilities
);
results[i] = evaluator.Evaluate(path, context) * 100.0; // Scale to FV
}
return results.Average();
}
}
}

View File

@@ -0,0 +1,22 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>disable</Nullable>
<UseSystemDrawing>true</UseSystemDrawing>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Accord.Statistics" Version="3.8.0" />
<PackageReference Include="ConsoleTableExt" Version="3.3.0" />
<PackageReference Include="Dapper" Version="2.0.143" />
<PackageReference Include="MathNet.Numerics" Version="5.0.0" />
<PackageReference Include="Microsoft.Data.Analysis" Version="0.20.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="7.0.0" />
<PackageReference Include="SqlServerBulkTools.Core" Version="1.0.0" />
<PackageReference Include="System.Data.SqlClient" Version="4.8.6" />
<PackageReference Include="System.Drawing.Common" Version="7.0.0" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,56 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibraryPricer.Models
{
public class DetailsCTFModel
{
public double TassoInteresse { get; set; }
public int DaysToMaturity { get; set; }
public string PDI_Style { get; set; }
public double PDI_Strike { get; set; }
public double PDI_Barrier { get; set; }
public double CapitalValue { get; set; }
public double NominalAmount { get; set; }
public double Bid { get; set; }
public double Ask { get; set; }
public DateTime LastDatePrice { get; set; }
public double CouponInMemory { get; set; }
public double ProtMinVal { get; set; }
public int AirBag { get; set; }
public double FattoreAirbag { get; set; }
public int OneStar { get; set; }
public double TriggerOnestar { get; set; }
public int TwinWin { get; set; }
public int Sigma { get; set; }
public int Relief { get; set; }
public int Domino { get; set; }
public string Category { get; set; }
public double CAP { get; set; }
public double Leva { get; set; }
}
}

View File

@@ -0,0 +1,27 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibraryPricer.Models
{
public class DetailsEventModel
{
public int DaysToObs { get; set; }
public int DaysToExDate { get; set; }
public double DaysToObsYFract { get; set; }
public double CouponValue { get; set; }
public double CouponTrigger { get; set; }
public double AutocallValue { get; set; }
public double AutocallTrigger { get; set; }
public int Memory { get; set; }
}
}

View File

@@ -0,0 +1,31 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibraryPricer.Models
{
public class DetailsULModel
{
public int IDUnderlyings { get; set; }
public string Sottostante { get; set; }
public DateTime MaturityDate { get; set; } // non usato, da togliere sia qui che in sp pricer_ULDetails (proprietà spostata in DetailsCTFModel!)
public double LastPrice { get; set; }
public double Strike { get; set; }
public double SpotPriceNormalized { get; set; }
public double Dividend { get; set; }
public double Volatility { get; set; }
public int DaysToMaturity { get; set; } // non usato, da togliere sia qui che in sp pricer_ULDetails (proprietà spostata in DetailsCTFModel!)
public double TassoInteresse { get; set; } // non usato, da togliere sia qui che in sp pricer_ULDetails (proprietà spostata in DetailsCTFModel!)
}
}

View File

@@ -0,0 +1,20 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibraryPricer.Models
{
public class HistPriceULModel
{
public int IDUnderlyings { get; set; }
public string Sottostante { get; set; }
public double Px_close { get; set; }
public DateTime Px_date { get; set; }
}
}

View File

@@ -0,0 +1,693 @@
using System.Diagnostics.Metrics;
namespace LibraryPricer.Payoffs;
public interface IPayoffEvaluator
{
double Evaluate(double[][] path, PayoffContext context);
}
public class PayoffContext
{
public int DaysToMaturity;
public double r;
public double CapitalValue;
public double ProtMinVal;
public double PDI_Barrier;
public string PDI_Style;
public double CouponInMemory;
public double[] DaysToObsYFract;
public double[] CouponTriggers;
public double[] CouponValues;
public double[] AutocallTriggers;
public double[] AutocallValues;
public int[] MemoryFlags;
public string Caso;
public double PDI_Strike;
public double FattoreAirbag;
public double TriggerOneStar;
public double CAP;
public int[] DaysToObs;
public double[] Volatility;
public int Airbag;
public int Sigma;
public int Relief;
public int TwinWin;
public int OneStar;
public double Leva { get; set; }
public double NominalAmount { get; set; }
public double[] PricesUL { get; set; }
public bool EnableDebug { get; set; }
}
public static class PayoffFactory
{
public static IPayoffEvaluator GetEvaluator(string caso)
{
return caso switch
{
"Standard" => new PayoffStandard(),
"Airbag" => new PayoffAirbag(),
"Sigma" => new PayoffSigma(),
"Relief" => new PayoffRelief(),
"TwinWin" => new PayoffTwinWin(),
"OneStar" => new PayoffOneStar(),
"Airbag + OneStar" => new PayoffAirbagOneStar(),
"Sigma + OneStar" => new PayoffSigmaOneStar(),
"Relief + OneStar" => new PayoffReliefOneStar(),
"TwinWin + OneStar" => new PayoffTwinWinOneStar(),
_ => throw new ArgumentException($"Payoff '{caso}' non gestito."),
};
}
}
public class PayoffStandard : IPayoffEvaluator
{
public string LastLabel { get; private set; } = "";
public double Evaluate(double[][] path, PayoffContext c)
{
double memory = c.CouponInMemory;
double coupons = 0;
double payoff = 0;
for (int k = 0; k < c.DaysToObs.Length; k++)
{
double min = path[c.DaysToObs[k]].Min();
// Autocall
if (min >= c.AutocallTriggers[k])
{
payoff = (c.AutocallValues[k] + memory) * Math.Exp(-c.r * c.DaysToObsYFract[k]) + coupons;
LastLabel = $"Autocall ␦ Trigger={c.AutocallTriggers[k]:F2}, Min={min:F2} ␦ Payoff={payoff:F2}";
if (c.EnableDebug) Console.WriteLine("DEBUG " + LastLabel);
return payoff;
}
// Cedola
if (min >= c.CouponTriggers[k])
{
coupons += (c.CouponValues[k] + memory) * Math.Exp(-c.r * c.DaysToObsYFract[k]);
memory = 0;
}
else
{
memory += c.MemoryFlags[k] * c.CouponValues[k];
}
// Scadenza
if (k == c.DaysToObs.Length - 1)
{
double minMat = path[c.DaysToMaturity].Min(); // Worst at maturity
double minTotal = path.SelectMany(p => p).Min(); // Worst overall
double barrierCheckValue = (c.PDI_Style == "European") ? minMat : minTotal;
if (barrierCheckValue >= c.PDI_Barrier)
{
payoff = (c.CapitalValue + memory) * Math.Exp(-c.r * c.DaysToObsYFract[k]) + coupons;
LastLabel = $"RIMBORSO standard ␦ minMat={minMat:F4}, minTotal={minTotal:F4} ␦ Payoff={payoff:F2}";
}
else
{
payoff = Math.Max(c.ProtMinVal, minMat / 100.0) * Math.Exp(-c.r * c.DaysToObsYFract[k]) + coupons;
LastLabel = $"PERDITA standard ␦ minMat={minMat:F4}, minTotal={minTotal:F4} ␦ Payoff={payoff:F2}";
}
if (c.EnableDebug) Console.WriteLine("DEBUG " + LastLabel);
return payoff;
}
}
LastLabel = "UNKNOWN";
if (c.EnableDebug) Console.WriteLine("DEBUG " + LastLabel);
return 0;
}
}
public class PayoffAirbag : IPayoffEvaluator
{
public double Evaluate(double[][] path, PayoffContext c)
{
double memory = c.CouponInMemory;
double coupons = 0;
for (int k = 0; k < c.DaysToObs.Length; k++)
{
double min = path[c.DaysToObs[k]].Min();
if (min >= c.AutocallTriggers[k])
return (c.AutocallValues[k] + memory) * Math.Exp(-c.r * c.DaysToObsYFract[k]) + coupons;
else if (min >= c.CouponTriggers[k])
{
coupons += (c.CouponValues[k] + memory) * Math.Exp(-c.r * c.DaysToObsYFract[k]);
memory = 0;
}
else
memory += c.MemoryFlags[k] * c.CouponValues[k];
if (k == c.DaysToObs.Length - 1)
{
double minMat = path[c.DaysToMaturity].Min();
double minTotal = path.SelectMany(p => p).Min();
bool sopraBarriera = (c.PDI_Style == "European" && minMat >= c.PDI_Barrier)
|| (c.PDI_Style == "American" && minTotal >= c.PDI_Barrier);
double payoff;
if (sopraBarriera)
payoff = c.CapitalValue + memory;
else
payoff = Math.Max(c.ProtMinVal, (minMat * c.FattoreAirbag / 100.0));
return payoff * Math.Exp(-c.r * c.DaysToObsYFract[k]) + coupons;
}
}
return 0;
}
}
public class PayoffTwinWin : IPayoffEvaluator
{
public double Evaluate(double[][] path, PayoffContext c)
{
double memory = c.CouponInMemory;
double coupons = 0;
for (int k = 0; k < c.DaysToObs.Length; k++)
{
double min = path[c.DaysToObs[k]].Min();
// Autocall
if (min >= c.AutocallTriggers[k])
return (c.AutocallValues[k] + memory) * Math.Exp(-c.r * c.DaysToObsYFract[k]) + coupons;
// Coupon pagato
else if (min >= c.CouponTriggers[k])
{
coupons += (c.CouponValues[k] + memory) * Math.Exp(-c.r * c.DaysToObsYFract[k]);
memory = 0;
}
else
{
// Coupon in memoria
memory += c.MemoryFlags[k] * c.CouponValues[k];
}
// Ultima osservazione: valutazione payoff finale
if (k == c.DaysToObs.Length - 1)
{
double minMat = path[c.DaysToMaturity].Min(); // Minimo al tempo di maturità
double minTotal = path.SelectMany(p => p).Min(); // Minimo assoluto di tutto il path
bool sopraStrike = minMat >= c.PDI_Strike && c.AutocallTriggers[k] == 999;
// Barriera europea → minMat; americana → minTotal
bool sopraBarriera = (c.PDI_Style == "European" && minMat >= c.PDI_Barrier) ||
(c.PDI_Style == "American" && minTotal >= c.PDI_Barrier);
double payoff;
if (sopraStrike)
{
payoff = memory + Math.Min(minMat / 100.0, c.CAP);
}
else if (sopraBarriera)
{
// TwinWin attivo: payoff speculare inverso
payoff = (200.0 - minMat) * c.CapitalValue / 100.0 + memory;
}
else
{
// Sotto barriera → perdita parziale
payoff = Math.Max(c.ProtMinVal, minMat / 100.0) + memory;
}
return payoff * Math.Exp(-c.r * c.DaysToObsYFract[k]) + coupons;
}
}
return 0;
}
}
public class PayoffOneStar : IPayoffEvaluator
{
public double Evaluate(double[][] path, PayoffContext c)
{
double memory = c.CouponInMemory;
double coupons = 0;
for (int k = 0; k < c.DaysToObs.Length; k++)
{
double min = path[c.DaysToObs[k]].Min();
// Autocall: rimborso anticipato
if (min >= c.AutocallTriggers[k])
return (c.AutocallValues[k] + memory) * Math.Exp(-c.r * c.DaysToObsYFract[k]) + coupons;
// Coupon trigger
if (min >= c.CouponTriggers[k])
{
coupons += (c.CouponValues[k] + memory) * Math.Exp(-c.r * c.DaysToObsYFract[k]);
memory = 0;
}
else
{
memory += c.MemoryFlags[k] * c.CouponValues[k];
}
// Scadenza
if (k == c.DaysToObs.Length - 1)
{
double maxMat = path[c.DaysToObs[k]].Max(); // Best
double minMat = path[c.DaysToMaturity].Min(); // Worst alla scadenza
double minTotal = path.SelectMany(p => p).Min(); // Worst su tutto il periodo
bool sopraTrigger = maxMat >= c.TriggerOneStar;
bool sopraBarriera = (c.PDI_Style == "European" && minMat >= c.PDI_Barrier)
|| (c.PDI_Style == "American" && minTotal >= c.PDI_Barrier);
// === Capitale ===
double capitale = sopraTrigger || sopraBarriera
? c.CapitalValue
: Math.Max(c.ProtMinVal, minMat / 100.0);
// === Cedole finali solo se supera la barriera cedola ===
double cedolaFinale = 0;
if (minMat >= c.CouponTriggers[k])
cedolaFinale = memory + c.CouponValues[k];
return capitale * Math.Exp(-c.r * c.DaysToObsYFract[k])
+ cedolaFinale * Math.Exp(-c.r * c.DaysToObsYFract[k])
+ coupons;
}
}
return 0;
}
}
public class PayoffSigma : IPayoffEvaluator
{
public double Evaluate(double[][] path, PayoffContext c)
{
double memory = c.CouponInMemory;
double coupons = 0;
for (int k = 0; k < c.DaysToObs.Length; k++)
{
double min = path[c.DaysToObs[k]].Min();
if (min >= c.AutocallTriggers[k])
return (c.AutocallValues[k] + memory) * Math.Exp(-c.r * c.DaysToObsYFract[k]) + coupons;
else if (min >= c.CouponTriggers[k])
{
coupons += (c.CouponValues[k] + memory) * Math.Exp(-c.r * c.DaysToObsYFract[k]);
memory = 0;
}
else
memory += c.MemoryFlags[k] * c.CouponValues[k];
if (k == c.DaysToObs.Length - 1)
{
double minMat = path[c.DaysToMaturity].Min();
double minTotal = path.SelectMany(p => p).Min();
bool sopraBarriera =
(c.PDI_Style == "European" && minMat >= c.PDI_Barrier) ||
(c.PDI_Style == "American" && minTotal >= c.PDI_Barrier);
double payoff;
if (sopraBarriera)
payoff = c.CapitalValue + memory;
else
payoff = Math.Max(c.ProtMinVal, (minMat + c.PDI_Strike - c.PDI_Barrier) / 100.0);
return payoff * Math.Exp(-c.r * c.DaysToObsYFract[k]) + coupons;
}
}
return 0;
}
}
public class PayoffRelief : IPayoffEvaluator
{
public double Evaluate(double[][] path, PayoffContext c)
{
double memory = c.CouponInMemory;
double coupons = 0;
for (int k = 0; k < c.DaysToObs.Length; k++)
{
double min = path[c.DaysToObs[k]].Min();
if (min >= c.AutocallTriggers[k])
return (c.AutocallValues[k] + memory) * Math.Exp(-c.r * c.DaysToObsYFract[k]) + coupons;
else if (min >= c.CouponTriggers[k])
{
coupons += (c.CouponValues[k] + memory) * Math.Exp(-c.r * c.DaysToObsYFract[k]);
memory = 0;
}
else
memory += c.MemoryFlags[k] * c.CouponValues[k];
if (k == c.DaysToObs.Length - 1)
{
double[] pricesAtMat = path[c.DaysToMaturity];
double secondMin = pricesAtMat.OrderBy(x => x).Skip(1).FirstOrDefault();
double minMat = pricesAtMat.Min();
double minTotal = path.SelectMany(p => p).Min();
bool sopraBarriera =
(c.PDI_Style == "European" && minMat >= c.PDI_Barrier) ||
(c.PDI_Style == "American" && minTotal >= c.PDI_Barrier);
double payoff;
if (sopraBarriera)
payoff = c.CapitalValue + memory;
else
payoff = Math.Max(c.ProtMinVal, secondMin / 100.0);
return payoff * Math.Exp(-c.r * c.DaysToObsYFract[k]) + coupons;
}
}
return 0;
}
}
public class PayoffAirbagOneStar : IPayoffEvaluator
{
public double Evaluate(double[][] path, PayoffContext c)
{
double memory = c.CouponInMemory;
double coupons = 0;
for (int k = 0; k < c.DaysToObs.Length; k++)
{
double min = path[c.DaysToObs[k]].Min();
// Autocall: uscita anticipata
if (min >= c.AutocallTriggers[k])
{
return (c.AutocallValues[k] + memory) * Math.Exp(-c.r * c.DaysToObsYFract[k]) + coupons;
}
// Cedola
if (min >= c.CouponTriggers[k])
{
coupons += (c.CouponValues[k] + memory) * Math.Exp(-c.r * c.DaysToObsYFract[k]);
memory = 0;
}
else
{
memory += c.MemoryFlags[k] * c.CouponValues[k];
}
// Scadenza
if (k == c.DaysToObs.Length - 1)
{
double maxMat = path[c.DaysToObs[k]].Max(); // Best performer finale
double minMat = path[c.DaysToMaturity].Min(); // Worst performer finale
double minTotal = path.SelectMany(p => p).Min(); // Worst performer sull'intero path
bool sopraTrigger = maxMat >= c.TriggerOneStar;
// Barriera osservata in stile europeo (minMat) o americano (minTotal)
bool sopraBarriera = (c.PDI_Style == "European" && minMat >= c.PDI_Barrier)
|| (c.PDI_Style == "American" && minTotal >= c.PDI_Barrier);
double capitale;
string debugLabel;
if (sopraTrigger || sopraBarriera)
{
capitale = c.CapitalValue;
debugLabel = sopraTrigger ? "ONESTAR" : "BARRIERA";
}
else
{
double perc = Math.Max(c.ProtMinVal, minMat / 100.0) * c.FattoreAirbag;
capitale = Math.Min(c.CapitalValue, perc);
debugLabel = "AIRBAG";
}
// Cedola finale solo se worst performer finale ≥ trigger cedola
double cedolaFinale = 0;
if (minMat >= c.CouponTriggers[k])
{
cedolaFinale = memory + c.CouponValues[k];
}
//Console.WriteLine($"DEBUG minMat={minMat:F4}, maxMat={maxMat:F4} ? {debugLabel}");
return capitale * Math.Exp(-c.r * c.DaysToObsYFract[k])
+ cedolaFinale * Math.Exp(-c.r * c.DaysToObsYFract[k])
+ coupons;
}
}
return 0;
}
}
public class PayoffSigmaOneStar : IPayoffEvaluator
{
public double Evaluate(double[][] path, PayoffContext c)
{
double memory = c.CouponInMemory;
double coupons = 0;
for (int k = 0; k < c.DaysToObs.Length; k++)
{
double min = path[c.DaysToObs[k]].Min();
// Autocall
if (min >= c.AutocallTriggers[k])
return (c.AutocallValues[k] + memory) * Math.Exp(-c.r * c.DaysToObsYFract[k]) + coupons;
// Cedola
if (min >= c.CouponTriggers[k])
{
coupons += (c.CouponValues[k] + memory) * Math.Exp(-c.r * c.DaysToObsYFract[k]);
memory = 0;
}
else
{
memory += c.MemoryFlags[k] * c.CouponValues[k];
}
// Scadenza
if (k == c.DaysToObs.Length - 1)
{
double maxMat = path[c.DaysToObs[k]].Max();
double minMat = path[c.DaysToMaturity].Min();
double minTotal = path.SelectMany(p => p).Min();
bool sopraTrigger = maxMat >= c.TriggerOneStar;
bool sopraBarriera = (c.PDI_Style == "European" && minMat >= c.PDI_Barrier)
|| (c.PDI_Style == "American" && minTotal >= c.PDI_Barrier);
double capitale;
if (sopraTrigger || sopraBarriera)
{
// Capitale protetto
capitale = c.CapitalValue;
}
else
{
// Sigma fallback logic
capitale = Math.Max(c.ProtMinVal, (minMat + c.PDI_Strike - c.PDI_Barrier) / 100.0);
}
// Cedola finale solo se worst sopra coupon trigger
double cedolaFinale = 0;
if (minMat >= c.CouponTriggers[k])
{
cedolaFinale = memory + c.CouponValues[k];
}
return capitale * Math.Exp(-c.r * c.DaysToObsYFract[k])
+ cedolaFinale * Math.Exp(-c.r * c.DaysToObsYFract[k])
+ coupons;
}
}
return 0;
}
}
public class PayoffReliefOneStar : IPayoffEvaluator
{
public double Evaluate(double[][] path, PayoffContext c)
{
double memory = c.CouponInMemory;
double coupons = 0;
for (int k = 0; k < c.DaysToObs.Length; k++)
{
double min = path[c.DaysToObs[k]].Min();
// Autocall
if (min >= c.AutocallTriggers[k])
return (c.AutocallValues[k] + memory) * Math.Exp(-c.r * c.DaysToObsYFract[k]) + coupons;
// Coupon
if (min >= c.CouponTriggers[k])
{
coupons += (c.CouponValues[k] + memory) * Math.Exp(-c.r * c.DaysToObsYFract[k]);
memory = 0;
}
else
{
memory += c.MemoryFlags[k] * c.CouponValues[k];
}
// Scadenza
if (k == c.DaysToObs.Length - 1)
{
double[] pricesAtMat = path[c.DaysToMaturity];
double secondMin = pricesAtMat.OrderBy(x => x).Skip(1).FirstOrDefault();
double minMat = pricesAtMat.Min();
double maxMat = path[c.DaysToObs[k]].Max();
double minTotal = path.SelectMany(p => p).Min();
bool sopraTrigger = maxMat >= c.TriggerOneStar;
bool sopraBarriera = (c.PDI_Style == "European" && minMat >= c.PDI_Barrier)
|| (c.PDI_Style == "American" && minTotal >= c.PDI_Barrier);
double capitale;
if (sopraTrigger || sopraBarriera)
{
capitale = c.CapitalValue;
}
else
{
capitale = Math.Max(c.ProtMinVal, secondMin / 100.0);
}
double cedolaFinale = 0;
if (minMat >= c.CouponTriggers[k])
{
cedolaFinale = memory + c.CouponValues[k];
}
return capitale * Math.Exp(-c.r * c.DaysToObsYFract[k])
+ cedolaFinale * Math.Exp(-c.r * c.DaysToObsYFract[k])
+ coupons;
}
}
return 0;
}
}
public class PayoffTwinWinOneStar : IPayoffEvaluator
{
public double Evaluate(double[][] path, PayoffContext c)
{
double memory = c.CouponInMemory;
double coupons = 0;
for (int k = 0; k < c.DaysToObs.Length; k++)
{
double min = path[c.DaysToObs[k]].Min();
// Autocall
if (min >= c.AutocallTriggers[k])
return (c.AutocallValues[k] + memory) * Math.Exp(-c.r * c.DaysToObsYFract[k]) + coupons;
// Cedola
if (min >= c.CouponTriggers[k])
{
coupons += (c.CouponValues[k] + memory) * Math.Exp(-c.r * c.DaysToObsYFract[k]);
memory = 0;
}
else
{
memory += c.MemoryFlags[k] * c.CouponValues[k];
}
// Scadenza
if (k == c.DaysToObs.Length - 1)
{
double maxMat = path[c.DaysToObs[k]].Max(); // Best performer
double minMat = path[c.DaysToMaturity].Min(); // Worst at maturity
double minTotal = path.SelectMany(p => p).Min(); // Worst on full path
bool sopraStrike = minMat >= c.PDI_Strike;
bool sopraBarriera = (c.PDI_Style == "European" && minMat >= c.PDI_Barrier)
|| (c.PDI_Style == "American" && minTotal >= c.PDI_Barrier);
double capitale;
string debugLabel;
if (sopraStrike)
{
capitale = Math.Min(minMat / 100.0, c.CAP);
debugLabel = "PARTECIPAZIONE";
}
else if (sopraBarriera)
{
capitale = (2 * c.CapitalValue) - (minMat / 100.0);
debugLabel = "TWINWIN";
}
else
{
if (maxMat >= c.TriggerOneStar)
{
capitale = c.CapitalValue;
debugLabel = "ONESTAR";
}
else
{
capitale = Math.Max(c.ProtMinVal, minMat / 100.0);
debugLabel = "PERDITA";
}
}
//Console.WriteLine($"DEBUG minMat={minMat:F4}, maxMat={maxMat:F4} ? {debugLabel}");
double cedolaFinale = 0;
if (minMat >= c.CouponTriggers[k])
{
cedolaFinale = memory + c.CouponValues[k];
}
return capitale * Math.Exp(-c.r * c.DaysToObsYFract[k])
+ cedolaFinale * Math.Exp(-c.r * c.DaysToObsYFract[k])
+ coupons;
}
}
return 0;
}
}

View File

@@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace LibraryPricer
{
public class PrezziSottostanti
{
public int IDUnderlyings { get; set; }
public string Sottostante { get; set; }
public double[] PrezziClose { get; set; }
}
}

View File

@@ -0,0 +1,7 @@
public class UnderlyingStats
{
public string Nome { get; set; } // Nome del sottostante
public double[] Prezzi { get; set; } // Prezzi storici
public double[] LogReturns { get; set; } // Rendimenti logaritmici
public double Volatility { get; set; } // Volatilità annualizzata (std. dev. dei log-return * sqrt(T))
}

View File

@@ -0,0 +1,7 @@
<!-- Mono library mapping mechanism -->
<configuration>
<dllmap dll="ntdll.dll">
<dllentry os="osx" dll="libc.dylib"/>
<dllentry os="linux,solaris,freebsd" dll="libc.so.6"/>
</dllmap>
</configuration>

View File

@@ -0,0 +1,639 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v6.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v6.0": {
"LibraryPricer/1.0.0": {
"dependencies": {
"Accord.Statistics": "3.8.0",
"ConsoleTableExt": "3.3.0",
"Dapper": "2.0.143",
"MathNet.Numerics": "5.0.0",
"Microsoft.Data.Analysis": "0.20.1",
"Microsoft.Extensions.Configuration.Json": "7.0.0",
"SqlServerBulkTools.Core": "1.0.0",
"System.Data.SqlClient": "4.8.6",
"System.Drawing.Common": "7.0.0"
},
"runtime": {
"LibraryPricer.dll": {}
}
},
"Accord/3.8.0": {
"runtime": {
"lib/netstandard2.0/Accord.dll": {
"assemblyVersion": "3.8.0.0",
"fileVersion": "3.8.0.6134"
}
}
},
"Accord.Math/3.8.0": {
"dependencies": {
"Accord": "3.8.0"
},
"runtime": {
"lib/netstandard2.0/Accord.Math.Core.dll": {
"assemblyVersion": "3.8.0.0",
"fileVersion": "3.8.0.6134"
},
"lib/netstandard2.0/Accord.Math.dll": {
"assemblyVersion": "3.8.0.0",
"fileVersion": "3.8.0.6134"
}
}
},
"Accord.Statistics/3.8.0": {
"dependencies": {
"Accord": "3.8.0",
"Accord.Math": "3.8.0"
},
"runtime": {
"lib/netstandard2.0/Accord.Statistics.dll": {
"assemblyVersion": "3.8.0.0",
"fileVersion": "3.8.0.6134"
}
}
},
"Apache.Arrow/2.0.0": {
"dependencies": {
"System.Buffers": "4.5.1",
"System.Memory": "4.5.3",
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
"System.Threading.Tasks.Extensions": "4.5.2"
},
"runtime": {
"lib/netcoreapp2.1/Apache.Arrow.dll": {
"assemblyVersion": "2.0.0.0",
"fileVersion": "2.0.0.0"
}
}
},
"ConsoleTableExt/3.3.0": {
"runtime": {
"lib/netstandard2.0/ConsoleTableExt.dll": {
"assemblyVersion": "3.1.9.0",
"fileVersion": "3.1.9.0"
}
}
},
"Dapper/2.0.143": {
"runtime": {
"lib/net5.0/Dapper.dll": {
"assemblyVersion": "2.0.0.0",
"fileVersion": "2.0.143.55328"
}
}
},
"MathNet.Numerics/5.0.0": {
"runtime": {
"lib/net6.0/MathNet.Numerics.dll": {
"assemblyVersion": "5.0.0.0",
"fileVersion": "5.0.0.0"
}
}
},
"Microsoft.Data.Analysis/0.20.1": {
"dependencies": {
"Apache.Arrow": "2.0.0",
"Microsoft.ML.DataView": "2.0.1",
"System.Buffers": "4.5.1",
"System.Memory": "4.5.3",
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
},
"runtime": {
"lib/netstandard2.0/Microsoft.Data.Analysis.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "0.2000.123.8101"
}
}
},
"Microsoft.Extensions.Configuration/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.Configuration.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.Configuration.Abstractions/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.Configuration.Abstractions.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.Configuration.FileExtensions/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Configuration": "7.0.0",
"Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
"Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
"Microsoft.Extensions.FileProviders.Physical": "7.0.0",
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.Configuration.FileExtensions.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.Configuration.Json/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Configuration": "7.0.0",
"Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
"Microsoft.Extensions.Configuration.FileExtensions": "7.0.0",
"Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
"System.Text.Json": "7.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.Configuration.Json.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.FileProviders.Abstractions/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.FileProviders.Abstractions.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.FileProviders.Physical/7.0.0": {
"dependencies": {
"Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
"Microsoft.Extensions.FileSystemGlobbing": "7.0.0",
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.FileProviders.Physical.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.FileSystemGlobbing/7.0.0": {
"runtime": {
"lib/net6.0/Microsoft.Extensions.FileSystemGlobbing.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.Primitives/7.0.0": {
"dependencies": {
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.Primitives.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.ML.DataView/2.0.1": {
"dependencies": {
"System.Collections.Immutable": "1.5.0",
"System.Memory": "4.5.3"
},
"runtime": {
"lib/netstandard2.0/Microsoft.ML.DataView.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "2.0.123.8101"
}
}
},
"Microsoft.NETCore.Platforms/3.1.0": {},
"Microsoft.Win32.Registry/4.7.0": {
"dependencies": {
"System.Security.AccessControl": "4.7.0",
"System.Security.Principal.Windows": "4.7.0"
}
},
"Microsoft.Win32.SystemEvents/7.0.0": {
"runtime": {
"lib/net6.0/Microsoft.Win32.SystemEvents.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
},
"runtimeTargets": {
"runtimes/win/lib/net6.0/Microsoft.Win32.SystemEvents.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"runtime.native.System.Data.SqlClient.sni/4.7.0": {
"dependencies": {
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": "4.4.0",
"runtime.win-x64.runtime.native.System.Data.SqlClient.sni": "4.4.0",
"runtime.win-x86.runtime.native.System.Data.SqlClient.sni": "4.4.0"
}
},
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"runtimeTargets": {
"runtimes/win-arm64/native/sni.dll": {
"rid": "win-arm64",
"assetType": "native",
"fileVersion": "4.6.25512.1"
}
}
},
"runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"runtimeTargets": {
"runtimes/win-x64/native/sni.dll": {
"rid": "win-x64",
"assetType": "native",
"fileVersion": "4.6.25512.1"
}
}
},
"runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"runtimeTargets": {
"runtimes/win-x86/native/sni.dll": {
"rid": "win-x86",
"assetType": "native",
"fileVersion": "4.6.25512.1"
}
}
},
"SqlServerBulkTools.Core/1.0.0": {
"dependencies": {
"System.Data.SqlClient": "4.8.6"
},
"runtime": {
"lib/netcoreapp2.1/SqlBulkTools.Core.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"System.Buffers/4.5.1": {},
"System.Collections.Immutable/1.5.0": {},
"System.Data.SqlClient/4.8.6": {
"dependencies": {
"Microsoft.Win32.Registry": "4.7.0",
"System.Security.Principal.Windows": "4.7.0",
"runtime.native.System.Data.SqlClient.sni": "4.7.0"
},
"runtime": {
"lib/netcoreapp2.1/System.Data.SqlClient.dll": {
"assemblyVersion": "4.6.1.6",
"fileVersion": "4.700.23.52603"
}
},
"runtimeTargets": {
"runtimes/unix/lib/netcoreapp2.1/System.Data.SqlClient.dll": {
"rid": "unix",
"assetType": "runtime",
"assemblyVersion": "4.6.1.6",
"fileVersion": "4.700.23.52603"
},
"runtimes/win/lib/netcoreapp2.1/System.Data.SqlClient.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "4.6.1.6",
"fileVersion": "4.700.23.52603"
}
}
},
"System.Drawing.Common/7.0.0": {
"dependencies": {
"Microsoft.Win32.SystemEvents": "7.0.0"
},
"runtime": {
"lib/net6.0/System.Drawing.Common.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
},
"runtimeTargets": {
"runtimes/win/lib/net6.0/System.Drawing.Common.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"System.Memory/4.5.3": {},
"System.Runtime.CompilerServices.Unsafe/6.0.0": {},
"System.Security.AccessControl/4.7.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"System.Security.Principal.Windows": "4.7.0"
}
},
"System.Security.Principal.Windows/4.7.0": {},
"System.Text.Encodings.Web/7.0.0": {
"dependencies": {
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
},
"runtime": {
"lib/net6.0/System.Text.Encodings.Web.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
},
"runtimeTargets": {
"runtimes/browser/lib/net6.0/System.Text.Encodings.Web.dll": {
"rid": "browser",
"assetType": "runtime",
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"System.Text.Json/7.0.0": {
"dependencies": {
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
"System.Text.Encodings.Web": "7.0.0"
},
"runtime": {
"lib/net6.0/System.Text.Json.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"System.Threading.Tasks.Extensions/4.5.2": {}
}
},
"libraries": {
"LibraryPricer/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"Accord/3.8.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-7kJrB570dO5ELim+2KWQNozuvWO9/BuZfZspdFy36fcWPNF2CEccblLuILeUlI8QJYd2DlBy0bfK8BlCx/uayA==",
"path": "accord/3.8.0",
"hashPath": "accord.3.8.0.nupkg.sha512"
},
"Accord.Math/3.8.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-K3dzeQjDIrwRnoTRoMOoIbul2Uc0B8cnEtdrSlirmIo37C+jVkmYpJzme/z4Kg99XR2Vj5W5TTNlhjn+AKR+8A==",
"path": "accord.math/3.8.0",
"hashPath": "accord.math.3.8.0.nupkg.sha512"
},
"Accord.Statistics/3.8.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-8WsmCE31Qdy3FmRvwtAY3F9/fJEi/6uyLQrhOvSI6pP6gpoaacmCrJRIphkGf2EB8gKHRWLAc4UXr1OOPHxkmQ==",
"path": "accord.statistics/3.8.0",
"hashPath": "accord.statistics.3.8.0.nupkg.sha512"
},
"Apache.Arrow/2.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-VR+F7g41WMJhr7WoZwwp05OrbYgM5Kmj3FwFXv1g0GgAYhEoCJz3L3qpllUWq9+X/rFKkFRZ2B8XcmsbaqGhrw==",
"path": "apache.arrow/2.0.0",
"hashPath": "apache.arrow.2.0.0.nupkg.sha512"
},
"ConsoleTableExt/3.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-kQ1P7mgDQbvEDXGt1sheOQbu37TidLnOv7RjcSCqW8m/weFtu4adMkN75YQHp4mSqquokGdBJOAKGiegLx2Nhg==",
"path": "consoletableext/3.3.0",
"hashPath": "consoletableext.3.3.0.nupkg.sha512"
},
"Dapper/2.0.143": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Vh0U+Fins3IpS7APUlrzga3+1mswWngB5fZ0xj4w+FQR5JhJzA5uHV5rSepkahvmshNZUA0YcHtae9vFQpiVTw==",
"path": "dapper/2.0.143",
"hashPath": "dapper.2.0.143.nupkg.sha512"
},
"MathNet.Numerics/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-pg1W2VwaEQMAiTpGK840hZgzavnqjlCMTVSbtVCXVyT+7AX4mc1o89SPv4TBlAjhgCOo9c1Y+jZ5m3ti2YgGgA==",
"path": "mathnet.numerics/5.0.0",
"hashPath": "mathnet.numerics.5.0.0.nupkg.sha512"
},
"Microsoft.Data.Analysis/0.20.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Or8x/g9oM+ti2bGqUmgip9Wxwr5/bQyNP9sQpke92i/3Bi+syq31kwJ4z8Dk93FECYT8IDETfcyT21J+F4rcdw==",
"path": "microsoft.data.analysis/0.20.1",
"hashPath": "microsoft.data.analysis.0.20.1.nupkg.sha512"
},
"Microsoft.Extensions.Configuration/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-tldQUBWt/xeH2K7/hMPPo5g8zuLc3Ro9I5d4o/XrxvxOCA2EZBtW7bCHHTc49fcBtvB8tLAb/Qsmfrq+2SJ4vA==",
"path": "microsoft.extensions.configuration/7.0.0",
"hashPath": "microsoft.extensions.configuration.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.Abstractions/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-f34u2eaqIjNO9YLHBz8rozVZ+TcFiFs0F3r7nUJd7FRkVSxk8u4OpoK226mi49MwexHOR2ibP9MFvRUaLilcQQ==",
"path": "microsoft.extensions.configuration.abstractions/7.0.0",
"hashPath": "microsoft.extensions.configuration.abstractions.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.FileExtensions/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-xk2lRJ1RDuqe57BmgvRPyCt6zyePKUmvT6iuXqiHR+/OIIgWVR8Ff5k2p6DwmqY8a17hx/OnrekEhziEIeQP6Q==",
"path": "microsoft.extensions.configuration.fileextensions/7.0.0",
"hashPath": "microsoft.extensions.configuration.fileextensions.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.Json/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-LDNYe3uw76W35Jci+be4LDf2lkQZe0A7EEYQVChFbc509CpZ4Iupod8li4PUXPBhEUOFI/rlQNf5xkzJRQGvtA==",
"path": "microsoft.extensions.configuration.json/7.0.0",
"hashPath": "microsoft.extensions.configuration.json.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.FileProviders.Abstractions/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-NyawiW9ZT/liQb34k9YqBSNPLuuPkrjMgQZ24Y/xXX1RoiBkLUdPMaQTmxhZ5TYu8ZKZ9qayzil75JX95vGQUg==",
"path": "microsoft.extensions.fileproviders.abstractions/7.0.0",
"hashPath": "microsoft.extensions.fileproviders.abstractions.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.FileProviders.Physical/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-K8D2MTR+EtzkbZ8z80LrG7Ur64R7ZZdRLt1J5cgpc/pUWl0C6IkAUapPuK28oionHueCPELUqq0oYEvZfalNdg==",
"path": "microsoft.extensions.fileproviders.physical/7.0.0",
"hashPath": "microsoft.extensions.fileproviders.physical.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.FileSystemGlobbing/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-2jONjKHiF+E92ynz2ZFcr9OvxIw+rTGMPEH+UZGeHTEComVav93jQUWGkso8yWwVBcEJGcNcZAaqY01FFJcj7w==",
"path": "microsoft.extensions.filesystemglobbing/7.0.0",
"hashPath": "microsoft.extensions.filesystemglobbing.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Primitives/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==",
"path": "microsoft.extensions.primitives/7.0.0",
"hashPath": "microsoft.extensions.primitives.7.0.0.nupkg.sha512"
},
"Microsoft.ML.DataView/2.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-w+GkAXlxaut65Lm+Fbp34YTfp0/9jGRn9uiVlL7Lls0/v+4IJM7SMTHfhvegPU48cyI6K2kzaK9j2Va/labhTA==",
"path": "microsoft.ml.dataview/2.0.1",
"hashPath": "microsoft.ml.dataview.2.0.1.nupkg.sha512"
},
"Microsoft.NETCore.Platforms/3.1.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==",
"path": "microsoft.netcore.platforms/3.1.0",
"hashPath": "microsoft.netcore.platforms.3.1.0.nupkg.sha512"
},
"Microsoft.Win32.Registry/4.7.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-KSrRMb5vNi0CWSGG1++id2ZOs/1QhRqROt+qgbEAdQuGjGrFcl4AOl4/exGPUYz2wUnU42nvJqon1T3U0kPXLA==",
"path": "microsoft.win32.registry/4.7.0",
"hashPath": "microsoft.win32.registry.4.7.0.nupkg.sha512"
},
"Microsoft.Win32.SystemEvents/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-2nXPrhdAyAzir0gLl8Yy8S5Mnm/uBSQQA7jEsILOS1MTyS7DbmV1NgViMtvV1sfCD1ebITpNwb1NIinKeJgUVQ==",
"path": "microsoft.win32.systemevents/7.0.0",
"hashPath": "microsoft.win32.systemevents.7.0.0.nupkg.sha512"
},
"runtime.native.System.Data.SqlClient.sni/4.7.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-9kyFSIdN3T0qjDQ2R0HRXYIhS3l5psBzQi6qqhdLz+SzFyEy4sVxNOke+yyYv8Cu8rPER12c3RDjLT8wF3WBYQ==",
"path": "runtime.native.system.data.sqlclient.sni/4.7.0",
"hashPath": "runtime.native.system.data.sqlclient.sni.4.7.0.nupkg.sha512"
},
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-LbrynESTp3bm5O/+jGL8v0Qg5SJlTV08lpIpFesXjF6uGNMWqFnUQbYBJwZTeua6E/Y7FIM1C54Ey1btLWupdg==",
"path": "runtime.win-arm64.runtime.native.system.data.sqlclient.sni/4.4.0",
"hashPath": "runtime.win-arm64.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512"
},
"runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-38ugOfkYJqJoX9g6EYRlZB5U2ZJH51UP8ptxZgdpS07FgOEToV+lS11ouNK2PM12Pr6X/PpT5jK82G3DwH/SxQ==",
"path": "runtime.win-x64.runtime.native.system.data.sqlclient.sni/4.4.0",
"hashPath": "runtime.win-x64.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512"
},
"runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-YhEdSQUsTx+C8m8Bw7ar5/VesXvCFMItyZF7G1AUY+OM0VPZUOeAVpJ4Wl6fydBGUYZxojTDR3I6Bj/+BPkJNA==",
"path": "runtime.win-x86.runtime.native.system.data.sqlclient.sni/4.4.0",
"hashPath": "runtime.win-x86.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512"
},
"SqlServerBulkTools.Core/1.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ZSe6s6YDxOaYEkuMYJDiZ1vLMDX70sZ5Y0vZ1qGGaDtvendiYXLX0n+f5OjdC2iMae/b8gRLkLe1lzHqYvivOA==",
"path": "sqlserverbulktools.core/1.0.0",
"hashPath": "sqlserverbulktools.core.1.0.0.nupkg.sha512"
},
"System.Buffers/4.5.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==",
"path": "system.buffers/4.5.1",
"hashPath": "system.buffers.4.5.1.nupkg.sha512"
},
"System.Collections.Immutable/1.5.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-EXKiDFsChZW0RjrZ4FYHu9aW6+P4MCgEDCklsVseRfhoO0F+dXeMSsMRAlVXIo06kGJ/zv+2w1a2uc2+kxxSaQ==",
"path": "system.collections.immutable/1.5.0",
"hashPath": "system.collections.immutable.1.5.0.nupkg.sha512"
},
"System.Data.SqlClient/4.8.6": {
"type": "package",
"serviceable": true,
"sha512": "sha512-2Ij/LCaTQRyAi5lAv7UUTV9R2FobC8xN9mE0fXBZohum/xLl8IZVmE98Rq5ugQHjCgTBRKqpXRb4ORulRdA6Ig==",
"path": "system.data.sqlclient/4.8.6",
"hashPath": "system.data.sqlclient.4.8.6.nupkg.sha512"
},
"System.Drawing.Common/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-KIX+oBU38pxkKPxvLcLfIkOV5Ien8ReN78wro7OF5/erwcmortzeFx+iBswlh2Vz6gVne0khocQudGwaO1Ey6A==",
"path": "system.drawing.common/7.0.0",
"hashPath": "system.drawing.common.7.0.0.nupkg.sha512"
},
"System.Memory/4.5.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==",
"path": "system.memory/4.5.3",
"hashPath": "system.memory.4.5.3.nupkg.sha512"
},
"System.Runtime.CompilerServices.Unsafe/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==",
"path": "system.runtime.compilerservices.unsafe/6.0.0",
"hashPath": "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512"
},
"System.Security.AccessControl/4.7.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==",
"path": "system.security.accesscontrol/4.7.0",
"hashPath": "system.security.accesscontrol.4.7.0.nupkg.sha512"
},
"System.Security.Principal.Windows/4.7.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==",
"path": "system.security.principal.windows/4.7.0",
"hashPath": "system.security.principal.windows.4.7.0.nupkg.sha512"
},
"System.Text.Encodings.Web/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==",
"path": "system.text.encodings.web/7.0.0",
"hashPath": "system.text.encodings.web.7.0.0.nupkg.sha512"
},
"System.Text.Json/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==",
"path": "system.text.json/7.0.0",
"hashPath": "system.text.json.7.0.0.nupkg.sha512"
},
"System.Threading.Tasks.Extensions/4.5.2": {
"type": "package",
"serviceable": true,
"sha512": "sha512-BG/TNxDFv0svAzx8OiMXDlsHfGw623BZ8tCXw4YLhDFDvDhNUEV58jKYMGRnkbJNm7c3JNNJDiN7JBMzxRBR2w==",
"path": "system.threading.tasks.extensions/4.5.2",
"hashPath": "system.threading.tasks.extensions.4.5.2.nupkg.sha512"
}
}
}

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,7 @@
<!-- Mono library mapping mechanism -->
<configuration>
<dllmap dll="ntdll.dll">
<dllentry os="osx" dll="libc.dylib"/>
<dllentry os="linux,solaris,freebsd" dll="libc.so.6"/>
</dllmap>
</configuration>

View File

@@ -0,0 +1,589 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v6.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v6.0": {
"LibraryPricer/1.0.0": {
"dependencies": {
"Accord.Statistics": "3.8.0",
"ConsoleTableExt": "3.3.0",
"Dapper": "2.0.143",
"MathNet.Numerics": "5.0.0",
"Microsoft.Data.Analysis": "0.20.1",
"Microsoft.Extensions.Configuration.Json": "7.0.0",
"SqlServerBulkTools.Core": "1.0.0",
"System.Data.SqlClient": "4.8.6"
},
"runtime": {
"LibraryPricer.dll": {}
}
},
"Accord/3.8.0": {
"runtime": {
"lib/netstandard2.0/Accord.dll": {
"assemblyVersion": "3.8.0.0",
"fileVersion": "3.8.0.6134"
}
}
},
"Accord.Math/3.8.0": {
"dependencies": {
"Accord": "3.8.0"
},
"runtime": {
"lib/netstandard2.0/Accord.Math.Core.dll": {
"assemblyVersion": "3.8.0.0",
"fileVersion": "3.8.0.6134"
},
"lib/netstandard2.0/Accord.Math.dll": {
"assemblyVersion": "3.8.0.0",
"fileVersion": "3.8.0.6134"
}
}
},
"Accord.Statistics/3.8.0": {
"dependencies": {
"Accord": "3.8.0",
"Accord.Math": "3.8.0"
},
"runtime": {
"lib/netstandard2.0/Accord.Statistics.dll": {
"assemblyVersion": "3.8.0.0",
"fileVersion": "3.8.0.6134"
}
}
},
"Apache.Arrow/2.0.0": {
"dependencies": {
"System.Buffers": "4.5.1",
"System.Memory": "4.5.3",
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
"System.Threading.Tasks.Extensions": "4.5.2"
},
"runtime": {
"lib/netcoreapp2.1/Apache.Arrow.dll": {
"assemblyVersion": "2.0.0.0",
"fileVersion": "2.0.0.0"
}
}
},
"ConsoleTableExt/3.3.0": {
"runtime": {
"lib/netstandard2.0/ConsoleTableExt.dll": {
"assemblyVersion": "3.1.9.0",
"fileVersion": "3.1.9.0"
}
}
},
"Dapper/2.0.143": {
"runtime": {
"lib/net5.0/Dapper.dll": {
"assemblyVersion": "2.0.0.0",
"fileVersion": "2.0.143.55328"
}
}
},
"MathNet.Numerics/5.0.0": {
"runtime": {
"lib/net6.0/MathNet.Numerics.dll": {
"assemblyVersion": "5.0.0.0",
"fileVersion": "5.0.0.0"
}
}
},
"Microsoft.Data.Analysis/0.20.1": {
"dependencies": {
"Apache.Arrow": "2.0.0",
"Microsoft.ML.DataView": "2.0.1",
"System.Buffers": "4.5.1",
"System.Memory": "4.5.3",
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
},
"runtime": {
"lib/netstandard2.0/Microsoft.Data.Analysis.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "0.2000.123.8101"
}
}
},
"Microsoft.Extensions.Configuration/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.Configuration.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.Configuration.Abstractions/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.Configuration.Abstractions.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.Configuration.FileExtensions/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Configuration": "7.0.0",
"Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
"Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
"Microsoft.Extensions.FileProviders.Physical": "7.0.0",
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.Configuration.FileExtensions.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.Configuration.Json/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Configuration": "7.0.0",
"Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
"Microsoft.Extensions.Configuration.FileExtensions": "7.0.0",
"Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
"System.Text.Json": "7.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.Configuration.Json.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.FileProviders.Abstractions/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.FileProviders.Abstractions.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.FileProviders.Physical/7.0.0": {
"dependencies": {
"Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
"Microsoft.Extensions.FileSystemGlobbing": "7.0.0",
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.FileProviders.Physical.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.FileSystemGlobbing/7.0.0": {
"runtime": {
"lib/net6.0/Microsoft.Extensions.FileSystemGlobbing.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.Primitives/7.0.0": {
"dependencies": {
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.Primitives.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.ML.DataView/2.0.1": {
"dependencies": {
"System.Collections.Immutable": "1.5.0",
"System.Memory": "4.5.3"
},
"runtime": {
"lib/netstandard2.0/Microsoft.ML.DataView.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "2.0.123.8101"
}
}
},
"Microsoft.NETCore.Platforms/3.1.0": {},
"Microsoft.Win32.Registry/4.7.0": {
"dependencies": {
"System.Security.AccessControl": "4.7.0",
"System.Security.Principal.Windows": "4.7.0"
}
},
"runtime.native.System.Data.SqlClient.sni/4.7.0": {
"dependencies": {
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": "4.4.0",
"runtime.win-x64.runtime.native.System.Data.SqlClient.sni": "4.4.0",
"runtime.win-x86.runtime.native.System.Data.SqlClient.sni": "4.4.0"
}
},
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"runtimeTargets": {
"runtimes/win-arm64/native/sni.dll": {
"rid": "win-arm64",
"assetType": "native",
"fileVersion": "4.6.25512.1"
}
}
},
"runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"runtimeTargets": {
"runtimes/win-x64/native/sni.dll": {
"rid": "win-x64",
"assetType": "native",
"fileVersion": "4.6.25512.1"
}
}
},
"runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"runtimeTargets": {
"runtimes/win-x86/native/sni.dll": {
"rid": "win-x86",
"assetType": "native",
"fileVersion": "4.6.25512.1"
}
}
},
"SqlServerBulkTools.Core/1.0.0": {
"dependencies": {
"System.Data.SqlClient": "4.8.6"
},
"runtime": {
"lib/netcoreapp2.1/SqlBulkTools.Core.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"System.Buffers/4.5.1": {},
"System.Collections.Immutable/1.5.0": {},
"System.Data.SqlClient/4.8.6": {
"dependencies": {
"Microsoft.Win32.Registry": "4.7.0",
"System.Security.Principal.Windows": "4.7.0",
"runtime.native.System.Data.SqlClient.sni": "4.7.0"
},
"runtime": {
"lib/netcoreapp2.1/System.Data.SqlClient.dll": {
"assemblyVersion": "4.6.1.6",
"fileVersion": "4.700.23.52603"
}
},
"runtimeTargets": {
"runtimes/unix/lib/netcoreapp2.1/System.Data.SqlClient.dll": {
"rid": "unix",
"assetType": "runtime",
"assemblyVersion": "4.6.1.6",
"fileVersion": "4.700.23.52603"
},
"runtimes/win/lib/netcoreapp2.1/System.Data.SqlClient.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "4.6.1.6",
"fileVersion": "4.700.23.52603"
}
}
},
"System.Memory/4.5.3": {},
"System.Runtime.CompilerServices.Unsafe/6.0.0": {},
"System.Security.AccessControl/4.7.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"System.Security.Principal.Windows": "4.7.0"
}
},
"System.Security.Principal.Windows/4.7.0": {},
"System.Text.Encodings.Web/7.0.0": {
"dependencies": {
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
},
"runtime": {
"lib/net6.0/System.Text.Encodings.Web.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
},
"runtimeTargets": {
"runtimes/browser/lib/net6.0/System.Text.Encodings.Web.dll": {
"rid": "browser",
"assetType": "runtime",
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"System.Text.Json/7.0.0": {
"dependencies": {
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
"System.Text.Encodings.Web": "7.0.0"
},
"runtime": {
"lib/net6.0/System.Text.Json.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"System.Threading.Tasks.Extensions/4.5.2": {}
}
},
"libraries": {
"LibraryPricer/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"Accord/3.8.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-7kJrB570dO5ELim+2KWQNozuvWO9/BuZfZspdFy36fcWPNF2CEccblLuILeUlI8QJYd2DlBy0bfK8BlCx/uayA==",
"path": "accord/3.8.0",
"hashPath": "accord.3.8.0.nupkg.sha512"
},
"Accord.Math/3.8.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-K3dzeQjDIrwRnoTRoMOoIbul2Uc0B8cnEtdrSlirmIo37C+jVkmYpJzme/z4Kg99XR2Vj5W5TTNlhjn+AKR+8A==",
"path": "accord.math/3.8.0",
"hashPath": "accord.math.3.8.0.nupkg.sha512"
},
"Accord.Statistics/3.8.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-8WsmCE31Qdy3FmRvwtAY3F9/fJEi/6uyLQrhOvSI6pP6gpoaacmCrJRIphkGf2EB8gKHRWLAc4UXr1OOPHxkmQ==",
"path": "accord.statistics/3.8.0",
"hashPath": "accord.statistics.3.8.0.nupkg.sha512"
},
"Apache.Arrow/2.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-VR+F7g41WMJhr7WoZwwp05OrbYgM5Kmj3FwFXv1g0GgAYhEoCJz3L3qpllUWq9+X/rFKkFRZ2B8XcmsbaqGhrw==",
"path": "apache.arrow/2.0.0",
"hashPath": "apache.arrow.2.0.0.nupkg.sha512"
},
"ConsoleTableExt/3.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-kQ1P7mgDQbvEDXGt1sheOQbu37TidLnOv7RjcSCqW8m/weFtu4adMkN75YQHp4mSqquokGdBJOAKGiegLx2Nhg==",
"path": "consoletableext/3.3.0",
"hashPath": "consoletableext.3.3.0.nupkg.sha512"
},
"Dapper/2.0.143": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Vh0U+Fins3IpS7APUlrzga3+1mswWngB5fZ0xj4w+FQR5JhJzA5uHV5rSepkahvmshNZUA0YcHtae9vFQpiVTw==",
"path": "dapper/2.0.143",
"hashPath": "dapper.2.0.143.nupkg.sha512"
},
"MathNet.Numerics/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-pg1W2VwaEQMAiTpGK840hZgzavnqjlCMTVSbtVCXVyT+7AX4mc1o89SPv4TBlAjhgCOo9c1Y+jZ5m3ti2YgGgA==",
"path": "mathnet.numerics/5.0.0",
"hashPath": "mathnet.numerics.5.0.0.nupkg.sha512"
},
"Microsoft.Data.Analysis/0.20.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Or8x/g9oM+ti2bGqUmgip9Wxwr5/bQyNP9sQpke92i/3Bi+syq31kwJ4z8Dk93FECYT8IDETfcyT21J+F4rcdw==",
"path": "microsoft.data.analysis/0.20.1",
"hashPath": "microsoft.data.analysis.0.20.1.nupkg.sha512"
},
"Microsoft.Extensions.Configuration/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-tldQUBWt/xeH2K7/hMPPo5g8zuLc3Ro9I5d4o/XrxvxOCA2EZBtW7bCHHTc49fcBtvB8tLAb/Qsmfrq+2SJ4vA==",
"path": "microsoft.extensions.configuration/7.0.0",
"hashPath": "microsoft.extensions.configuration.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.Abstractions/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-f34u2eaqIjNO9YLHBz8rozVZ+TcFiFs0F3r7nUJd7FRkVSxk8u4OpoK226mi49MwexHOR2ibP9MFvRUaLilcQQ==",
"path": "microsoft.extensions.configuration.abstractions/7.0.0",
"hashPath": "microsoft.extensions.configuration.abstractions.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.FileExtensions/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-xk2lRJ1RDuqe57BmgvRPyCt6zyePKUmvT6iuXqiHR+/OIIgWVR8Ff5k2p6DwmqY8a17hx/OnrekEhziEIeQP6Q==",
"path": "microsoft.extensions.configuration.fileextensions/7.0.0",
"hashPath": "microsoft.extensions.configuration.fileextensions.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.Json/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-LDNYe3uw76W35Jci+be4LDf2lkQZe0A7EEYQVChFbc509CpZ4Iupod8li4PUXPBhEUOFI/rlQNf5xkzJRQGvtA==",
"path": "microsoft.extensions.configuration.json/7.0.0",
"hashPath": "microsoft.extensions.configuration.json.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.FileProviders.Abstractions/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-NyawiW9ZT/liQb34k9YqBSNPLuuPkrjMgQZ24Y/xXX1RoiBkLUdPMaQTmxhZ5TYu8ZKZ9qayzil75JX95vGQUg==",
"path": "microsoft.extensions.fileproviders.abstractions/7.0.0",
"hashPath": "microsoft.extensions.fileproviders.abstractions.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.FileProviders.Physical/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-K8D2MTR+EtzkbZ8z80LrG7Ur64R7ZZdRLt1J5cgpc/pUWl0C6IkAUapPuK28oionHueCPELUqq0oYEvZfalNdg==",
"path": "microsoft.extensions.fileproviders.physical/7.0.0",
"hashPath": "microsoft.extensions.fileproviders.physical.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.FileSystemGlobbing/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-2jONjKHiF+E92ynz2ZFcr9OvxIw+rTGMPEH+UZGeHTEComVav93jQUWGkso8yWwVBcEJGcNcZAaqY01FFJcj7w==",
"path": "microsoft.extensions.filesystemglobbing/7.0.0",
"hashPath": "microsoft.extensions.filesystemglobbing.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Primitives/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==",
"path": "microsoft.extensions.primitives/7.0.0",
"hashPath": "microsoft.extensions.primitives.7.0.0.nupkg.sha512"
},
"Microsoft.ML.DataView/2.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-w+GkAXlxaut65Lm+Fbp34YTfp0/9jGRn9uiVlL7Lls0/v+4IJM7SMTHfhvegPU48cyI6K2kzaK9j2Va/labhTA==",
"path": "microsoft.ml.dataview/2.0.1",
"hashPath": "microsoft.ml.dataview.2.0.1.nupkg.sha512"
},
"Microsoft.NETCore.Platforms/3.1.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==",
"path": "microsoft.netcore.platforms/3.1.0",
"hashPath": "microsoft.netcore.platforms.3.1.0.nupkg.sha512"
},
"Microsoft.Win32.Registry/4.7.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-KSrRMb5vNi0CWSGG1++id2ZOs/1QhRqROt+qgbEAdQuGjGrFcl4AOl4/exGPUYz2wUnU42nvJqon1T3U0kPXLA==",
"path": "microsoft.win32.registry/4.7.0",
"hashPath": "microsoft.win32.registry.4.7.0.nupkg.sha512"
},
"runtime.native.System.Data.SqlClient.sni/4.7.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-9kyFSIdN3T0qjDQ2R0HRXYIhS3l5psBzQi6qqhdLz+SzFyEy4sVxNOke+yyYv8Cu8rPER12c3RDjLT8wF3WBYQ==",
"path": "runtime.native.system.data.sqlclient.sni/4.7.0",
"hashPath": "runtime.native.system.data.sqlclient.sni.4.7.0.nupkg.sha512"
},
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-LbrynESTp3bm5O/+jGL8v0Qg5SJlTV08lpIpFesXjF6uGNMWqFnUQbYBJwZTeua6E/Y7FIM1C54Ey1btLWupdg==",
"path": "runtime.win-arm64.runtime.native.system.data.sqlclient.sni/4.4.0",
"hashPath": "runtime.win-arm64.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512"
},
"runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-38ugOfkYJqJoX9g6EYRlZB5U2ZJH51UP8ptxZgdpS07FgOEToV+lS11ouNK2PM12Pr6X/PpT5jK82G3DwH/SxQ==",
"path": "runtime.win-x64.runtime.native.system.data.sqlclient.sni/4.4.0",
"hashPath": "runtime.win-x64.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512"
},
"runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-YhEdSQUsTx+C8m8Bw7ar5/VesXvCFMItyZF7G1AUY+OM0VPZUOeAVpJ4Wl6fydBGUYZxojTDR3I6Bj/+BPkJNA==",
"path": "runtime.win-x86.runtime.native.system.data.sqlclient.sni/4.4.0",
"hashPath": "runtime.win-x86.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512"
},
"SqlServerBulkTools.Core/1.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ZSe6s6YDxOaYEkuMYJDiZ1vLMDX70sZ5Y0vZ1qGGaDtvendiYXLX0n+f5OjdC2iMae/b8gRLkLe1lzHqYvivOA==",
"path": "sqlserverbulktools.core/1.0.0",
"hashPath": "sqlserverbulktools.core.1.0.0.nupkg.sha512"
},
"System.Buffers/4.5.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==",
"path": "system.buffers/4.5.1",
"hashPath": "system.buffers.4.5.1.nupkg.sha512"
},
"System.Collections.Immutable/1.5.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-EXKiDFsChZW0RjrZ4FYHu9aW6+P4MCgEDCklsVseRfhoO0F+dXeMSsMRAlVXIo06kGJ/zv+2w1a2uc2+kxxSaQ==",
"path": "system.collections.immutable/1.5.0",
"hashPath": "system.collections.immutable.1.5.0.nupkg.sha512"
},
"System.Data.SqlClient/4.8.6": {
"type": "package",
"serviceable": true,
"sha512": "sha512-2Ij/LCaTQRyAi5lAv7UUTV9R2FobC8xN9mE0fXBZohum/xLl8IZVmE98Rq5ugQHjCgTBRKqpXRb4ORulRdA6Ig==",
"path": "system.data.sqlclient/4.8.6",
"hashPath": "system.data.sqlclient.4.8.6.nupkg.sha512"
},
"System.Memory/4.5.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==",
"path": "system.memory/4.5.3",
"hashPath": "system.memory.4.5.3.nupkg.sha512"
},
"System.Runtime.CompilerServices.Unsafe/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==",
"path": "system.runtime.compilerservices.unsafe/6.0.0",
"hashPath": "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512"
},
"System.Security.AccessControl/4.7.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==",
"path": "system.security.accesscontrol/4.7.0",
"hashPath": "system.security.accesscontrol.4.7.0.nupkg.sha512"
},
"System.Security.Principal.Windows/4.7.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==",
"path": "system.security.principal.windows/4.7.0",
"hashPath": "system.security.principal.windows.4.7.0.nupkg.sha512"
},
"System.Text.Encodings.Web/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==",
"path": "system.text.encodings.web/7.0.0",
"hashPath": "system.text.encodings.web.7.0.0.nupkg.sha512"
},
"System.Text.Json/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==",
"path": "system.text.json/7.0.0",
"hashPath": "system.text.json.7.0.0.nupkg.sha512"
},
"System.Threading.Tasks.Extensions/4.5.2": {
"type": "package",
"serviceable": true,
"sha512": "sha512-BG/TNxDFv0svAzx8OiMXDlsHfGw623BZ8tCXw4YLhDFDvDhNUEV58jKYMGRnkbJNm7c3JNNJDiN7JBMzxRBR2w==",
"path": "system.threading.tasks.extensions/4.5.2",
"hashPath": "system.threading.tasks.extensions.4.5.2.nupkg.sha512"
}
}
}

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]

View File

@@ -0,0 +1,22 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("LibraryPricer")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("LibraryPricer")]
[assembly: System.Reflection.AssemblyTitleAttribute("LibraryPricer")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Generated by the MSBuild WriteCodeFragment class.

View File

@@ -0,0 +1 @@
0bfc16e5a8c9f323991ffb60041597ab8f6a91bf73e257708d3f6c34c8bddcca

View File

@@ -0,0 +1,15 @@
is_global = true
build_property.TargetFramework = net6.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = LibraryPricer
build_property.ProjectDir = C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.EffectiveAnalysisLevelStyle = 6.0
build_property.EnableCodeStyleSeverity =

View File

@@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

View File

@@ -0,0 +1 @@
f9f184781ead26f4ae022942074dcb3fef81f153b6c40356507a4b03bc41420e

View File

@@ -0,0 +1,13 @@
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\bin\Debug\net6.0\Accord.dll.config
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\bin\Debug\net6.0\LibraryPricer.deps.json
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\bin\Debug\net6.0\LibraryPricer.dll
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\bin\Debug\net6.0\LibraryPricer.pdb
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\obj\Debug\net6.0\LibraryPricer.csproj.AssemblyReference.cache
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\obj\Debug\net6.0\LibraryPricer.GeneratedMSBuildEditorConfig.editorconfig
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\obj\Debug\net6.0\LibraryPricer.AssemblyInfoInputs.cache
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\obj\Debug\net6.0\LibraryPricer.AssemblyInfo.cs
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\obj\Debug\net6.0\LibraryPricer.csproj.CoreCompileInputs.cache
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\obj\Debug\net6.0\LibraryPricer.dll
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\obj\Debug\net6.0\refint\LibraryPricer.dll
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\obj\Debug\net6.0\LibraryPricer.pdb
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\obj\Debug\net6.0\ref\LibraryPricer.dll

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,111 @@
{
"format": 1,
"restore": {
"C:\\Users\\Admin\\Sviluppo\\PricerAPI\\LibraryPricer\\LibraryPricer.csproj": {}
},
"projects": {
"C:\\Users\\Admin\\Sviluppo\\PricerAPI\\LibraryPricer\\LibraryPricer.csproj": {
"version": "1.0.0",
"restore": {
"projectUniqueName": "C:\\Users\\Admin\\Sviluppo\\PricerAPI\\LibraryPricer\\LibraryPricer.csproj",
"projectName": "LibraryPricer",
"projectPath": "C:\\Users\\Admin\\Sviluppo\\PricerAPI\\LibraryPricer\\LibraryPricer.csproj",
"packagesPath": "C:\\Users\\Admin\\.nuget\\packages\\",
"outputPath": "C:\\Users\\Admin\\Sviluppo\\PricerAPI\\LibraryPricer\\obj\\",
"projectStyle": "PackageReference",
"fallbackFolders": [
"C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
],
"configFilePaths": [
"C:\\Users\\Admin\\AppData\\Roaming\\NuGet\\NuGet.Config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
"C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
],
"originalTargetFrameworks": [
"net6.0"
],
"sources": {
"C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
"https://api.nuget.org/v3/index.json": {}
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"projectReferences": {}
}
},
"warningProperties": {
"warnAsError": [
"NU1605"
]
},
"restoreAuditProperties": {
"enableAudit": "true",
"auditLevel": "low",
"auditMode": "direct"
},
"SdkAnalysisLevel": "9.0.300"
},
"frameworks": {
"net6.0": {
"targetAlias": "net6.0",
"dependencies": {
"Accord.Statistics": {
"target": "Package",
"version": "[3.8.0, )"
},
"ConsoleTableExt": {
"target": "Package",
"version": "[3.3.0, )"
},
"Dapper": {
"target": "Package",
"version": "[2.0.143, )"
},
"MathNet.Numerics": {
"target": "Package",
"version": "[5.0.0, )"
},
"Microsoft.Data.Analysis": {
"target": "Package",
"version": "[0.20.1, )"
},
"Microsoft.Extensions.Configuration.Json": {
"target": "Package",
"version": "[7.0.0, )"
},
"SqlServerBulkTools.Core": {
"target": "Package",
"version": "[1.0.0, )"
},
"System.Data.SqlClient": {
"target": "Package",
"version": "[4.8.6, )"
},
"System.Drawing.Common": {
"target": "Package",
"version": "[7.0.0, )"
}
},
"imports": [
"net461",
"net462",
"net47",
"net471",
"net472",
"net48",
"net481"
],
"assetTargetFallback": true,
"warn": true,
"frameworkReferences": {
"Microsoft.NETCore.App": {
"privateAssets": "all"
}
},
"runtimeIdentifierGraphPath": "C:\\Program Files\\dotnet\\sdk\\9.0.307\\RuntimeIdentifierGraph.json"
}
}
}
}
}

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\Admin\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.14.0</NuGetToolVersion>
</PropertyGroup>
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<SourceRoot Include="C:\Users\Admin\.nuget\packages\" />
<SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
</ItemGroup>
</Project>

View File

@@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
<Import Project="$(NuGetPackageRoot)system.text.json\7.0.0\buildTransitive\net6.0\System.Text.Json.targets" Condition="Exists('$(NuGetPackageRoot)system.text.json\7.0.0\buildTransitive\net6.0\System.Text.Json.targets')" />
<Import Project="$(NuGetPackageRoot)accord\3.8.0\build\Accord.targets" Condition="Exists('$(NuGetPackageRoot)accord\3.8.0\build\Accord.targets')" />
</ImportGroup>
</Project>

View File

@@ -0,0 +1,4 @@
// <autogenerated />
using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]

View File

@@ -0,0 +1,22 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
using System;
using System.Reflection;
[assembly: System.Reflection.AssemblyCompanyAttribute("LibraryPricer")]
[assembly: System.Reflection.AssemblyConfigurationAttribute("Lite")]
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
[assembly: System.Reflection.AssemblyProductAttribute("LibraryPricer")]
[assembly: System.Reflection.AssemblyTitleAttribute("LibraryPricer")]
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
// Generato dalla classe WriteCodeFragment di MSBuild.

View File

@@ -0,0 +1 @@
d8587d303fca4f8a0618f823f17b8946496a830cfbbc7899b4143b6e80803a1b

View File

@@ -0,0 +1,15 @@
is_global = true
build_property.TargetFramework = net6.0
build_property.TargetPlatformMinVersion =
build_property.UsingMicrosoftNETSdkWeb =
build_property.ProjectTypeGuids =
build_property.InvariantGlobalization =
build_property.PlatformNeutralAssembly =
build_property.EnforceExtendedAnalyzerRules =
build_property._SupportedPlatformList = Linux,macOS,Windows
build_property.RootNamespace = LibraryPricer
build_property.ProjectDir = C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\
build_property.EnableComHosting =
build_property.EnableGeneratedComInterfaceComImportInterop =
build_property.EffectiveAnalysisLevelStyle = 6.0
build_property.EnableCodeStyleSeverity =

View File

@@ -0,0 +1,8 @@
// <auto-generated/>
global using global::System;
global using global::System.Collections.Generic;
global using global::System.IO;
global using global::System.Linq;
global using global::System.Net.Http;
global using global::System.Threading;
global using global::System.Threading.Tasks;

View File

@@ -0,0 +1 @@
b243d8f5ff26b05a1ef7620e76677dd59042c85bf50f27ee35c0e2bf048cdf88

View File

@@ -0,0 +1,13 @@
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\bin\Lite\net6.0\Accord.dll.config
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\bin\Lite\net6.0\LibraryPricer.deps.json
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\bin\Lite\net6.0\LibraryPricer.dll
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\bin\Lite\net6.0\LibraryPricer.pdb
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\obj\Lite\net6.0\LibraryPricer.csproj.AssemblyReference.cache
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\obj\Lite\net6.0\LibraryPricer.GeneratedMSBuildEditorConfig.editorconfig
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\obj\Lite\net6.0\LibraryPricer.AssemblyInfoInputs.cache
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\obj\Lite\net6.0\LibraryPricer.AssemblyInfo.cs
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\obj\Lite\net6.0\LibraryPricer.csproj.CoreCompileInputs.cache
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\obj\Lite\net6.0\LibraryPricer.dll
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\obj\Lite\net6.0\refint\LibraryPricer.dll
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\obj\Lite\net6.0\LibraryPricer.pdb
C:\Users\Admin\Sviluppo\PricerAPI\LibraryPricer\obj\Lite\net6.0\ref\LibraryPricer.dll

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,45 @@
{
"version": 2,
"dgSpecHash": "TkI2IlAUSek=",
"success": true,
"projectFilePath": "C:\\Users\\Admin\\Sviluppo\\PricerAPI\\LibraryPricer\\LibraryPricer.csproj",
"expectedPackageFiles": [
"C:\\Users\\Admin\\.nuget\\packages\\accord\\3.8.0\\accord.3.8.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\accord.math\\3.8.0\\accord.math.3.8.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\accord.statistics\\3.8.0\\accord.statistics.3.8.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\apache.arrow\\2.0.0\\apache.arrow.2.0.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\consoletableext\\3.3.0\\consoletableext.3.3.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\dapper\\2.0.143\\dapper.2.0.143.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\mathnet.numerics\\5.0.0\\mathnet.numerics.5.0.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\microsoft.data.analysis\\0.20.1\\microsoft.data.analysis.0.20.1.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\microsoft.extensions.configuration\\7.0.0\\microsoft.extensions.configuration.7.0.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\microsoft.extensions.configuration.abstractions\\7.0.0\\microsoft.extensions.configuration.abstractions.7.0.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\microsoft.extensions.configuration.fileextensions\\7.0.0\\microsoft.extensions.configuration.fileextensions.7.0.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\microsoft.extensions.configuration.json\\7.0.0\\microsoft.extensions.configuration.json.7.0.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\microsoft.extensions.fileproviders.abstractions\\7.0.0\\microsoft.extensions.fileproviders.abstractions.7.0.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\microsoft.extensions.fileproviders.physical\\7.0.0\\microsoft.extensions.fileproviders.physical.7.0.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\microsoft.extensions.filesystemglobbing\\7.0.0\\microsoft.extensions.filesystemglobbing.7.0.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\microsoft.extensions.primitives\\7.0.0\\microsoft.extensions.primitives.7.0.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\microsoft.ml.dataview\\2.0.1\\microsoft.ml.dataview.2.0.1.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\microsoft.netcore.platforms\\3.1.0\\microsoft.netcore.platforms.3.1.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\microsoft.win32.registry\\4.7.0\\microsoft.win32.registry.4.7.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\microsoft.win32.systemevents\\7.0.0\\microsoft.win32.systemevents.7.0.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\runtime.native.system.data.sqlclient.sni\\4.7.0\\runtime.native.system.data.sqlclient.sni.4.7.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\runtime.win-arm64.runtime.native.system.data.sqlclient.sni\\4.4.0\\runtime.win-arm64.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\runtime.win-x64.runtime.native.system.data.sqlclient.sni\\4.4.0\\runtime.win-x64.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\runtime.win-x86.runtime.native.system.data.sqlclient.sni\\4.4.0\\runtime.win-x86.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\sqlserverbulktools.core\\1.0.0\\sqlserverbulktools.core.1.0.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\system.buffers\\4.5.1\\system.buffers.4.5.1.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\system.collections.immutable\\1.5.0\\system.collections.immutable.1.5.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\system.data.sqlclient\\4.8.6\\system.data.sqlclient.4.8.6.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\system.drawing.common\\7.0.0\\system.drawing.common.7.0.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\system.memory\\4.5.3\\system.memory.4.5.3.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\system.runtime.compilerservices.unsafe\\6.0.0\\system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\system.security.accesscontrol\\4.7.0\\system.security.accesscontrol.4.7.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\system.security.principal.windows\\4.7.0\\system.security.principal.windows.4.7.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\system.text.encodings.web\\7.0.0\\system.text.encodings.web.7.0.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\system.text.json\\7.0.0\\system.text.json.7.0.0.nupkg.sha512",
"C:\\Users\\Admin\\.nuget\\packages\\system.threading.tasks.extensions\\4.5.2\\system.threading.tasks.extensions.4.5.2.nupkg.sha512"
],
"logs": []
}

67
Pricer/Pricer.csproj Normal file
View File

@@ -0,0 +1,67 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0-windows7.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<UseWindowsForms>true</UseWindowsForms>
<Nullable>disable</Nullable>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Lite'">
<StartupObject>PricerAppLite.ProgramLite</StartupObject>
</PropertyGroup>
<ItemGroup>
<Content Include="pricer.ico" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="ConsoleTableExt" Version="3.3.0" />
<PackageReference Include="MathNet.Numerics" Version="5.0.0" />
<PackageReference Include="Microsoft.Data.Analysis" Version="0.20.1" />
<PackageReference Include="System.Data.SqlClient" Version="4.8.6" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LibraryPricer\LibraryPricer.csproj" />
</ItemGroup>
<ItemGroup>
<Compile Remove="Program.Lite.cs" />
<None Include="Program.Lite.cs" />
</ItemGroup>
<ItemGroup>
<Compile Update="Properties\Resources.Designer.cs">
<DesignTime>True</DesignTime>
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Update="Properties\Settings.Designer.cs">
<DesignTimeSharedInput>True</DesignTimeSharedInput>
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Update="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<None Update="appsettings.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Update="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
</ItemGroup>
</Project>

649
Pricer/Program.Lite.Api.cs Normal file
View File

@@ -0,0 +1,649 @@
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using System.Text.Json;
using ConsoleTableExt;
using LibraryPricer;
using Microsoft.SqlServer.Server;
using System.Data;
using System.Diagnostics;
using static LibraryPricer.CalcFunctions;
using MathNet.Numerics.Optimization;
using System.Reflection;
using MathNet.Numerics;
using MathNet.Numerics.Statistics;
using LibraryPricer.Payoffs;
using Accord.Math;
namespace PricerAppLite // Note: actual namespace depends on the project name.
{
internal class ProgramLite
{
static void Main(string[] args)
{
string version = "2.2 - [12/06/2025]";
Console.Title = $"Pricer v.{version}";
ManualRun(args);
}
public static void ManualRun(string[] args)
{
bool showSimulationDebug = args.Any(a => a.Equals("--sim-debug", StringComparison.OrdinalIgnoreCase));
// Input Isin da elaborare
Console.WriteLine("Inserire ISIN (default IT0006767633): "); // CH0456761649 (Airbag) , XS2306677134 (Sigma), IT0006746074 (Relief), CH0392531056 (TwinWin)
string? Isin = Console.ReadLine();
if (String.IsNullOrEmpty(Isin)) Isin = "IT0006767633";
// Input numero prezzi eod per calcolo matrice correlazione
Console.WriteLine("Num. Prezzi EOD per calcolo matrice correlazione e volatilità (default 252): ");
string? PrezziEOD = Console.ReadLine();
int numPrezziEOD = 0;
if (String.IsNullOrEmpty(PrezziEOD)) numPrezziEOD = 252;
else numPrezziEOD = Convert.ToInt32(PrezziEOD);
// Carica dati da API
PricerApiResponse apiData = LoadApiData(Isin, numPrezziEOD);
// Verifica Isin sia valido per il pricer
if (!string.IsNullOrEmpty(apiData.ISINCheck) && apiData.ISINCheck == "KO")
{
Console.WriteLine($"ISIN {Isin} non processabile!");
Console.WriteLine("Certificati nel pricer devono avere le seguenti caratteristiche : ");
Console.WriteLine("- Categoria: Coupon,StepUp,Bonus (con Barriera Discreta)");
Console.WriteLine("- Status: In Quotazione");
Console.WriteLine("- Direction: Long");
Console.WriteLine("- Basket Type : Worst");
Console.WriteLine("- Currency : EUR");
Console.WriteLine("- CedolaVariabile : FALSE");
Console.WriteLine("- Darwin : FALSE");
Console.WriteLine("- Domino : FALSE");
Console.WriteLine("- Magnet : FALSE");
RestartOrExit(args);
}
Console.WriteLine("Considerare i dividendi ? s/n (default s): ");
string? IsDividend = Console.ReadLine();
if (String.IsNullOrEmpty(IsDividend)) IsDividend = "s";
int num_sims = 0;
Console.WriteLine("Inserire # simulazioni montecarlo (default = 10000) : ");
string? numsim = Console.ReadLine();
if (String.IsNullOrEmpty(numsim)) num_sims = 10000;
else num_sims = Convert.ToInt32(numsim);
// Carica dettagli sottostanti
var detailsULModel = apiData.DetailsUL?.ToArray() ?? Array.Empty<DetailsULItem>();
if (detailsULModel.Length == 0)
{
Console.WriteLine("Nessun dettaglio sottostante disponibile.");
RestartOrExit(args);
}
// Calcolo matrice di correlazione e volatilita da prezzi EOD
var pricesById = BuildPriceSeries(apiData.HistPriceUL, numPrezziEOD);
double[,] corrMatrix = BuildCorrelationMatrix(detailsULModel, pricesById, numPrezziEOD);
double[] Volatility = BuildVolatility(detailsULModel, pricesById, numPrezziEOD);
// Visualizza matrice di correlazione in Console
string[] NomiSottostanti = detailsULModel.AsEnumerable().Select(r => r.Sottostante).ToArray();
ConsoleTableBuilder.From(CalcFunctions.ArraytoDatatable(corrMatrix, NomiSottostanti))
.WithTitle($"Matrix Correl {Isin}", ConsoleColor.Yellow, ConsoleColor.DarkGray)
.ExportAndWriteLine();
// Carica dettagli certificato
var detailsCTFModel = apiData.DetailsCTF?.ToArray() ?? Array.Empty<DetailsCTFItem>();
if (detailsCTFModel.Length == 0)
{
Console.WriteLine("Nessun dettaglio certificato disponibile.");
RestartOrExit(args);
}
// Carica dettagli eventi
var detailsEventModel = apiData.DetailsEvent?.ToArray() ?? Array.Empty<DetailsEventItem>();
var detailsEventExDateModel = apiData.DetailsEventExDate?.ToArray() ?? Array.Empty<DetailsEventExDateItem>();
// Inizializzazione parametri input per calcolo FairValue da detailsCTFModel
double TassoInteresse = detailsCTFModel.AsEnumerable().Select(r => r.TassoInteresse).FirstOrDefault();
DateTime baseDate = detailsCTFModel.AsEnumerable().Select(r => r.LastDatePrice).FirstOrDefault().Date;
DateTime maturityDate = detailsCTFModel.AsEnumerable().Select(r => r.Maturity_Date).FirstOrDefault().Date;
int DaysToMaturity = CountBusinessDaysInclusive(baseDate, maturityDate);
string? PDI_Style = detailsCTFModel.AsEnumerable().Select(r => r.PDI_Style).FirstOrDefault();
double PDI_Strike = detailsCTFModel.AsEnumerable().Select(r => r.PDI_Strike).FirstOrDefault();
double PDI_Barrier = Math.Round(detailsCTFModel.AsEnumerable().Select(r => r.PDI_Barrier).FirstOrDefault(), 4);
double CapitalValue = detailsCTFModel.AsEnumerable().Select(r => r.CapitalValue).FirstOrDefault();
double NominalAmount = detailsCTFModel.AsEnumerable().Select(r => r.NominalAmount).FirstOrDefault();
double Bid = detailsCTFModel.AsEnumerable().Select(r => r.Bid).FirstOrDefault();
double Ask = detailsCTFModel.AsEnumerable().Select(r => r.Ask).FirstOrDefault();
DateTime LastDatePrice = detailsCTFModel.AsEnumerable().Select(r => r.LastDatePrice).FirstOrDefault();
double CouponInMemory = detailsCTFModel.AsEnumerable().Select(r => r.CouponInMemory).FirstOrDefault();
double ProtMinVal = detailsCTFModel.AsEnumerable().Select(r => r.ProtMinVal).FirstOrDefault();
int AirBag = detailsCTFModel.AsEnumerable().Select(r => r.AirBag ? 1 : 0).FirstOrDefault();
double FattoreAirbag = detailsCTFModel.AsEnumerable().Select(r => r.FattoreAirbag).FirstOrDefault();
int OneStar = detailsCTFModel.AsEnumerable().Select(r => r.OneStar ? 1 : 0).FirstOrDefault();
double TriggerOnestar = Math.Round(detailsCTFModel.AsEnumerable().Select(r => r.TriggerOnestar).FirstOrDefault(),4);
int TwinWin = detailsCTFModel.AsEnumerable().Select(r => r.TwinWin ? 1 : 0).FirstOrDefault();
int Sigma = detailsCTFModel.AsEnumerable().Select(r => r.Sigma ? 1 : 0).FirstOrDefault();
int Relief = detailsCTFModel.AsEnumerable().Select(r => r.Relief ? 1 : 0).FirstOrDefault();
int Domino = detailsCTFModel.AsEnumerable().Select(r => r.Domino ? 1 : 0).FirstOrDefault();
string Category = detailsCTFModel.AsEnumerable().Select(r => r.Category).FirstOrDefault();
double CAP = detailsCTFModel.AsEnumerable().Select(r => r.CAP ?? 0.0).FirstOrDefault();
double Leva = detailsCTFModel.AsEnumerable().Select(r => r.Leva ?? 0.0).FirstOrDefault();
// Inizializzazione parametri input per calcolo FairValue da detailsULModel
double[] PricesUL = detailsULModel.AsEnumerable().Select(r => r.SpotPriceNormalized).ToArray();
double[] Dividends = detailsULModel.AsEnumerable().Select(r => r.Dividend).ToArray();
if (IsDividend != "s") System.Array.Clear(Dividends, 0, Dividends.Length); // non usa i dividendi se non richiesto
//double[] Volatility = detailsULModel.AsEnumerable().Select(r => r.Volatility).ToArray();
int numSottostanti = detailsULModel.Length;
// Inizializzazione parametri input per calcolo FairValue da detailsEventModel
int[] DaysToObs = detailsEventModel.Select(r => CountBusinessDaysInclusive(baseDate, r.ObsDate.Date)).ToArray();
int[] DaysToExDate = detailsEventExDateModel.Select(r => CountBusinessDaysInclusive(baseDate, r.ExDate.Date)).ToArray();
double[] DaysToObsYFract = DaysToObs.Select(r => r / 252.0).ToArray();
double[] DaysToExDateYFract = DaysToExDate.Select(r => r / 252.0).ToArray();
double[] CouponValues = detailsEventModel.Select(r => r.CouponValue).ToArray();
double[] CouponTriggers = detailsEventModel.Select(r => r.CouponTrigger).ToArray();
double[] AutocallValues = detailsEventModel.Select(r => r.AutocallValue).ToArray();
double[] AutocallTriggers = detailsEventModel.Select(r => r.AutocallTrigger).ToArray();
int[] MemoryFlags = detailsEventModel.Select(r => r.Memory ? 1 : 0).ToArray();
int numEventi = detailsEventModel.Length;
// Visualizza dati input Sottostanti
DataTable dtInputDataUL = new DataTable();
dtInputDataUL.Columns.Add("Sottostante", typeof(string));
dtInputDataUL.Columns.Add("Price", typeof(double));
dtInputDataUL.Columns.Add("Dividend", typeof(double));
dtInputDataUL.Columns.Add("Volatility", typeof(double));
for (int i = 0; i < numSottostanti; i++)
{
dtInputDataUL.Rows.Add(
NomiSottostanti[i],
Math.Round(PricesUL[i], 4),
Math.Round(Dividends[i], 4),
Math.Round(Volatility[i], 4)
);
}
Console.WriteLine();
ConsoleTableBuilder.From(dtInputDataUL)
.WithTitle($"Dati Input Sottostanti {Isin}", ConsoleColor.Cyan, ConsoleColor.DarkGray)
.ExportAndWriteLine();
// Visualizza dati input Certificato
DataTable dtInputDataCTF = new DataTable();
dtInputDataCTF.Columns.Add("TassoInteresse", typeof(double));
dtInputDataCTF.Columns.Add("DaysToMaturity", typeof(double));
dtInputDataCTF.Columns.Add("PDI Style", typeof(string));
dtInputDataCTF.Columns.Add("PDI Barrier", typeof(double));
dtInputDataCTF.Columns.Add("Capital Value", typeof(double));
dtInputDataCTF.Columns.Add("Coupon In Memoria", typeof(double));
dtInputDataCTF.Columns.Add("Prot Min Val %", typeof(double));
dtInputDataCTF.Rows.Add(Math.Round(TassoInteresse, 4), DaysToMaturity, PDI_Style, PDI_Barrier, Math.Round(CapitalValue * NominalAmount, 5), Math.Round(CouponInMemory, 5), Math.Round(ProtMinVal, 3));
Console.WriteLine();
ConsoleTableBuilder.From(dtInputDataCTF)
.WithTitle($"Dati Input Certificato {Isin}", ConsoleColor.Green, ConsoleColor.DarkGray)
.ExportAndWriteLine();
// Visualizza dati input Flag Certificato
DataTable dtInputFlagCTF = new DataTable();
dtInputFlagCTF.Columns.Add("AirBag", typeof(int));
dtInputFlagCTF.Columns.Add("Fattore Airbag", typeof(double));
dtInputFlagCTF.Columns.Add("OneStar", typeof(int));
dtInputFlagCTF.Columns.Add("TriggerOnestar", typeof(double));
dtInputFlagCTF.Columns.Add("TwinWin", typeof(int));
dtInputFlagCTF.Columns.Add("Sigma", typeof(int));
dtInputFlagCTF.Columns.Add("Relief", typeof(int));
//dtInputFlagCTF.Columns.Add("Domino", typeof(int));
dtInputFlagCTF.Rows.Add(AirBag, Math.Round(FattoreAirbag, 3), OneStar, TriggerOnestar, TwinWin, Sigma, Relief);
Console.WriteLine();
ConsoleTableBuilder.From(dtInputFlagCTF)
.WithTitle($"Dati Input Flags {Isin}", ConsoleColor.DarkCyan, ConsoleColor.DarkGray)
.ExportAndWriteLine();
// Visualizza dati input Eventi
DataTable dtInputDataEvents = new DataTable();
dtInputDataEvents.Columns.Add("DaysToObs.", typeof(int));
//dtInputDataEvents.Columns.Add("DaysToExDate", typeof(int)); // Solo Debug nuova colonna
dtInputDataEvents.Columns.Add("DaysToObsYFract", typeof(double));
dtInputDataEvents.Columns.Add("Cpn. Value", typeof(double));
dtInputDataEvents.Columns.Add("Cpn. Trigger", typeof(double));
dtInputDataEvents.Columns.Add("Autoc. Value", typeof(double));
dtInputDataEvents.Columns.Add("Autoc. Trigger", typeof(double));
dtInputDataEvents.Columns.Add("Memory", typeof(int));
for (int i = 0; i < numEventi; i++)
{
int exDate = (i < DaysToExDate.Length) ? DaysToExDate[i] : -1;
dtInputDataEvents.Rows.Add(
DaysToObs[i],
//exDate,
Math.Round(DaysToObsYFract[i], 4),
Math.Round(CouponValues[i] * NominalAmount, 6),
Math.Round(CouponTriggers[i], 6),
Math.Round(AutocallValues[i] * NominalAmount, 6),
Math.Round(AutocallTriggers[i], 6),
MemoryFlags[i]
);
}
Console.WriteLine();
ConsoleTableBuilder.From(dtInputDataEvents)
.WithTitle($"Dati Input Eventi {Isin}", ConsoleColor.DarkYellow, ConsoleColor.DarkGray)
.ExportAndWriteLine();
Console.WriteLine("Elaborazione Fair value in corso...");
// Costruzione del contesto originale dai dati caricati
var contextOriginal = new PayoffContext
{
DaysToMaturity = DaysToMaturity,
r = TassoInteresse,
CapitalValue = CapitalValue,
ProtMinVal = ProtMinVal,
PDI_Barrier = PDI_Barrier,
PDI_Style = PDI_Style,
CouponInMemory = CouponInMemory,
DaysToObsYFract = DaysToObsYFract,
CouponTriggers = CouponTriggers,
CouponValues = CouponValues,
AutocallTriggers = AutocallTriggers,
AutocallValues = AutocallValues,
MemoryFlags = MemoryFlags,
Caso = GetCasoString(AirBag, Sigma, Relief, TwinWin, OneStar),
PDI_Strike = PDI_Strike,
FattoreAirbag = FattoreAirbag,
TriggerOneStar = TriggerOnestar,
CAP = CAP,
DaysToObs = DaysToObs,
Airbag = AirBag,
Sigma = Sigma,
Relief = Relief,
TwinWin = TwinWin,
OneStar = OneStar,
Leva = Leva,
Volatility = Volatility,
PricesUL = PricesUL,
NominalAmount = NominalAmount,
EnableDebug = showSimulationDebug
};
// Cloni distinti per ogni motore
var contextForFairValue = FairValueComparison.CloneContext(contextOriginal);
var contextForArray = FairValueComparison.CloneContext(contextOriginal);
var contextForCompare = FairValueComparison.CloneContext(contextOriginal);
// Run FairValueArray per distribuzione
double[] fvalues = CalcFunctions.FairValueArray(
PricesUL,
corrMatrix,
numSottostanti,
num_sims,
TassoInteresse,
DaysToMaturity,
Dividends,
Volatility,
DaysToObs,
DaysToObsYFract,
CouponValues,
CouponTriggers,
AutocallValues,
AutocallTriggers,
MemoryFlags,
CouponInMemory,
PDI_Style,
PDI_Strike,
PDI_Barrier,
CapitalValue,
ProtMinVal,
AirBag,
Sigma,
TwinWin,
Relief,
FattoreAirbag,
OneStar,
TriggerOnestar,
CAP,
Leva).FairValueArray;
int[] fv = new int[fvalues.Length];
for (int i = 0; i < fvalues.Length; i++)
fv[i] = (int)Math.Floor(fvalues[i] * NominalAmount / 100);
var stopwatch = System.Diagnostics.Stopwatch.StartNew();
// Run GBM con Engine Payoff
FairValueComparison.CompareFairValues(
num_sims,
Enumerable.Range(0, num_sims)
.Select(_ => (double[])PricesUL.Clone())
.ToArray(),
corrMatrix,
numSottostanti,
DaysToMaturity,
TassoInteresse,
Dividends,
contextForCompare,
NominalAmount,
Isin,
Ask,
Bid,
LastDatePrice,
Category,
detailsEventModel.Select(r => r.ObsDate.Date).ToArray()
);
stopwatch.Stop();
Console.WriteLine($"\nTempo Elaborazione GBM Engine Payoff: {stopwatch.Elapsed.TotalSeconds:F2} sec");
Console.WriteLine("----------------------------------------");
// Verifica potenziale sottostima del fair value se ci sono ex-date future non ancora maturate
if (DaysToExDate.Length > DaysToObs.Length)
{
int lastObs = DaysToObs.Last();
int lastEx = DaysToExDate.Last();
if (lastObs < lastEx)
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("ATTENZIONE: POSSIBILE SOTTOSTIMA DEL FAIR VALUE");
Console.WriteLine("\n Il calcolo del fair value presume che il coupon sia già stato pagato,");
Console.WriteLine(" ma in realtà non è ancora maturato (la Ex-Date non è ancora stata raggiunta).");
Console.WriteLine(" Il titolo incorpora ancora quel coupon nel suo prezzo, ma il pricer lo ha già scontato.");
Console.WriteLine("\n Inoltre, se erano presenti coupon in memoria, questi sono stati azzerati nel calcolo,");
Console.WriteLine(" come se il pagamento fosse già avvenuto.");
Console.WriteLine(" In realtà il diritto al pagamento non è ancora stato acquisito.");
Console.WriteLine(" Questo comporta una POSSIBILE SOTTOSTIMA SIGNIFICATIVA del FAIR VALUE.");
Console.WriteLine("\n SUGGERIMENTO: verificare manualmente lultimo evento osservato");
Console.WriteLine(" e valutare limpatto potenziale sul fair value atteso.");
Console.ResetColor();
}
}
RestartOrExit(args);
}
private static PricerApiResponse LoadApiData(string isin, int numPrezziEOD)
{
string url = $"https://smartapi.smart-roots.net/api/Pricer?isin={Uri.EscapeDataString(isin)}&numPrezziEOD={numPrezziEOD}";
using HttpClient httpClient = new HttpClient();
httpClient.Timeout = TimeSpan.FromSeconds(60);
string json = httpClient.GetStringAsync(url).GetAwaiter().GetResult();
var options = new JsonSerializerOptions
{
PropertyNameCaseInsensitive = true
};
PricerApiResponse? data = JsonSerializer.Deserialize<PricerApiResponse>(json, options);
if (data == null)
{
throw new InvalidOperationException("Risposta API non valida.");
}
return data;
}
private static Dictionary<int, double[]> BuildPriceSeries(List<HistPriceULItem>? histPrice, int numPrezziEOD)
{
if (histPrice == null || histPrice.Count == 0)
{
return new Dictionary<int, double[]>();
}
var byUl = histPrice
.GroupBy(p => p.IDUnderlyings)
.ToDictionary(
g => g.Key,
g => g.OrderBy(p => p.rn).Select(p => p.Px_close).Take(numPrezziEOD).ToArray()
);
return byUl;
}
private static double[,] BuildCorrelationMatrix(DetailsULItem[] detailsULModel, Dictionary<int, double[]> pricesById, int numPrezziEOD)
{
int numUL = detailsULModel.Length;
double[,] correlMatrix = new double[numUL, numUL];
int expected = numUL * numPrezziEOD;
int actual = pricesById.Values.Sum(p => p.Length);
if (expected > 0 && actual < expected)
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine($"Attenzione! Rilevati meno di {numPrezziEOD} prezzi eod in uno dei sottostanti");
Console.WriteLine($"Matrice di correlazione calcolata usando {actual / Math.Max(1, numUL)} prezzi eod");
Console.ResetColor();
}
for (int i = 0; i < numUL; i++)
{
correlMatrix[i, i] = 1.0;
int idA = detailsULModel[i].IDUnderlyings;
double[] seriesA = pricesById.ContainsKey(idA) ? pricesById[idA] : Array.Empty<double>();
for (int j = i + 1; j < numUL; j++)
{
int idB = detailsULModel[j].IDUnderlyings;
double[] seriesB = pricesById.ContainsKey(idB) ? pricesById[idB] : Array.Empty<double>();
int len = Math.Min(seriesA.Length, seriesB.Length);
double corr = 0.0;
if (len >= 2)
{
corr = Correlation.Pearson(seriesA.Take(len), seriesB.Take(len));
}
correlMatrix[i, j] = corr;
}
for (int k = 0; k < numUL; k++)
{
if (correlMatrix[i, k] == 0) correlMatrix[i, k] = correlMatrix[k, i];
}
}
return correlMatrix;
}
private static double[] BuildVolatility(DetailsULItem[] detailsULModel, Dictionary<int, double[]> pricesById, int numPrezziEOD)
{
int numUL = detailsULModel.Length;
double[] volatilities = new double[numUL];
for (int i = 0; i < numUL; i++)
{
int id = detailsULModel[i].IDUnderlyings;
double[] prices = pricesById.ContainsKey(id) ? pricesById[id] : Array.Empty<double>();
volatilities[i] = ComputeAnnualizedVolatility(prices);
}
int expected = numUL * numPrezziEOD;
int actual = pricesById.Values.Sum(p => p.Length);
if (expected > 0 && actual < expected)
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine($"Volatilita calcolata usando {actual / Math.Max(1, numUL)} prezzi eod");
Console.ResetColor();
}
return volatilities;
}
private static double ComputeAnnualizedVolatility(double[] prices)
{
if (prices == null || prices.Length < 2)
{
return 0.0;
}
int n = prices.Length;
double[] logReturns = new double[n - 1];
for (int i = 0; i < n - 1; i++)
{
if (prices[i] > 0 && prices[i + 1] > 0)
{
logReturns[i] = Math.Log(prices[i] / prices[i + 1]);
}
else
{
logReturns[i] = 0.0;
}
}
double avg = logReturns.Average();
double sumSquared = logReturns.Select(r => Math.Pow(r - avg, 2)).Sum();
double variance = logReturns.Length > 1 ? sumSquared / (logReturns.Length - 1) : 0.0;
double stdDev = Math.Sqrt(variance);
return stdDev * Math.Sqrt(252);
}
private static int CountBusinessDaysInclusive(DateTime startDate, DateTime endDate)
{
if (endDate < startDate)
{
return 0;
}
int count = 0;
DateTime current = startDate;
while (current <= endDate)
{
if (current.DayOfWeek != DayOfWeek.Saturday && current.DayOfWeek != DayOfWeek.Sunday)
{
count++;
}
current = current.AddDays(1);
}
return count;
}
private class PricerApiResponse
{
public string ISINCheck { get; set; }
public List<HistPriceULItem> HistPriceUL { get; set; }
public List<DetailsULItem> DetailsUL { get; set; }
public List<DetailsEventItem> DetailsEvent { get; set; }
public List<DetailsEventExDateItem> DetailsEventExDate { get; set; }
public List<DetailsCTFItem> DetailsCTF { get; set; }
}
private class HistPriceULItem
{
public int IDUnderlyings { get; set; }
public string Sottostante { get; set; }
public double Px_close { get; set; }
public DateTime Px_date { get; set; }
public int rn { get; set; }
}
private class DetailsULItem
{
public int IDUnderlyings { get; set; }
public string Sottostante { get; set; }
public double LastPrice { get; set; }
public double Strike { get; set; }
public double SpotPriceNormalized { get; set; }
public double Dividend { get; set; }
public double Volatility { get; set; }
public double TassoInteresse { get; set; }
}
private class DetailsEventItem
{
public DateTime ObsDate { get; set; }
public double CouponValue { get; set; }
public double CouponTrigger { get; set; }
public double AutocallValue { get; set; }
public double AutocallTrigger { get; set; }
public bool Memory { get; set; }
}
private class DetailsEventExDateItem
{
public DateTime ExDate { get; set; }
public double CouponValue { get; set; }
public double CouponTrigger { get; set; }
public double AutocallValue { get; set; }
public double AutocallTrigger { get; set; }
public bool Memory { get; set; }
}
private class DetailsCTFItem
{
public double TassoInteresse { get; set; }
public DateTime Maturity_Date { get; set; }
public string PDI_Style { get; set; }
public double PDI_Strike { get; set; }
public double PDI_Barrier { get; set; }
public double CapitalValue { get; set; }
public double NominalAmount { get; set; }
public double Bid { get; set; }
public double Ask { get; set; }
public DateTime LastDatePrice { get; set; }
public double CouponInMemory { get; set; }
public double ProtMinVal { get; set; }
public bool AirBag { get; set; }
public double FattoreAirbag { get; set; }
public bool OneStar { get; set; }
public double TriggerOnestar { get; set; }
public bool TwinWin { get; set; }
public bool Sigma { get; set; }
public bool Relief { get; set; }
public bool Domino { get; set; }
public string Category { get; set; }
public double? CAP { get; set; }
public double? Leva { get; set; }
}
private static string GetCasoString(int airbag, int sigma, int relief, int twinwin, int onestar)
{
List<string> componenti = new();
if (airbag == 1) componenti.Add("Airbag");
if (sigma == 1) componenti.Add("Sigma");
if (relief == 1) componenti.Add("Relief");
if (twinwin == 1) componenti.Add("TwinWin");
if (onestar == 1) componenti.Add("OneStar");
return componenti.Count > 0 ? string.Join(" + ", componenti) : "Standard";
}
private static void RestartOrExit(string[] args)
{
Console.WriteLine();
Console.WriteLine("Premere Invio per riavviare il programma o Q per uscire...");
string? input = Console.ReadLine();
if (!string.IsNullOrWhiteSpace(input) &&
input.Equals("Q", StringComparison.OrdinalIgnoreCase))
{
Environment.Exit(0);
}
if (!Console.IsOutputRedirected)
{
try
{
Console.Clear();
}
catch (IOException)
{
// Ignore if console buffer isn't available (e.g., redirected output).
}
}
ManualRun(args);
}
}
}

63
Pricer/Properties/Resources.Designer.cs generated Normal file
View File

@@ -0,0 +1,63 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Il codice è stato generato da uno strumento.
// Versione runtime:4.0.30319.42000
//
// Le modifiche apportate a questo file possono provocare un comportamento non corretto e andranno perse se
// il codice viene rigenerato.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Pricer.Properties {
using System;
/// <summary>
/// Classe di risorse fortemente tipizzata per la ricerca di stringhe localizzate e così via.
/// </summary>
// Questa classe è stata generata automaticamente dalla classe StronglyTypedResourceBuilder.
// tramite uno strumento quale ResGen o Visual Studio.
// Per aggiungere o rimuovere un membro, modificare il file con estensione ResX ed eseguire nuovamente ResGen
// con l'opzione /str oppure ricompilare il progetto VS.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Restituisce l'istanza di ResourceManager nella cache utilizzata da questa classe.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Pricer.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Esegue l'override della proprietà CurrentUICulture del thread corrente per tutte le
/// ricerche di risorse eseguite utilizzando questa classe di risorse fortemente tipizzata.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
}
}

View File

@@ -0,0 +1,101 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 1.3
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object]
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object]
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

26
Pricer/Properties/Settings.Designer.cs generated Normal file
View File

@@ -0,0 +1,26 @@
//------------------------------------------------------------------------------
// <auto-generated>
// Il codice è stato generato da uno strumento.
// Versione runtime:4.0.30319.42000
//
// Le modifiche apportate a questo file possono provocare un comportamento non corretto e andranno perse se
// il codice viene rigenerato.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Pricer.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.14.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
}
}

View File

@@ -0,0 +1,6 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
<Profiles>
<Profile Name="(Default)" />
</Profiles>
</SettingsFile>

14
Pricer/appsettings.json Normal file
View File

@@ -0,0 +1,14 @@
{
"ConnectionStrings": {
"FirstSolutionDB": "Data Source=26.69.45.60;Initial Catalog=FirstSolutionDB;Persist Security Info=True;User ID=sa;Password=Skyline72"
},
"exclude": [
"**/bin",
"**/bower_components",
"**/jspm_packages",
"**/node_modules",
"**/obj",
"**/platforms"
]
}

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,7 @@
<!-- Mono library mapping mechanism -->
<configuration>
<dllmap dll="ntdll.dll">
<dllentry os="osx" dll="libc.dylib"/>
<dllentry os="linux,solaris,freebsd" dll="libc.so.6"/>
</dllmap>
</configuration>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,659 @@
{
"runtimeTarget": {
"name": ".NETCoreApp,Version=v6.0",
"signature": ""
},
"compilationOptions": {},
"targets": {
".NETCoreApp,Version=v6.0": {
"Pricer/1.0.0": {
"dependencies": {
"ConsoleTableExt": "3.3.0",
"LibraryPricer": "1.0.0",
"MathNet.Numerics": "5.0.0",
"Microsoft.Data.Analysis": "0.20.1",
"System.Data.SqlClient": "4.8.6"
},
"runtime": {
"Pricer.dll": {}
}
},
"Accord/3.8.0": {
"runtime": {
"lib/netstandard2.0/Accord.dll": {
"assemblyVersion": "3.8.0.0",
"fileVersion": "3.8.0.6134"
}
}
},
"Accord.Math/3.8.0": {
"dependencies": {
"Accord": "3.8.0"
},
"runtime": {
"lib/netstandard2.0/Accord.Math.Core.dll": {
"assemblyVersion": "3.8.0.0",
"fileVersion": "3.8.0.6134"
},
"lib/netstandard2.0/Accord.Math.dll": {
"assemblyVersion": "3.8.0.0",
"fileVersion": "3.8.0.6134"
}
}
},
"Accord.Statistics/3.8.0": {
"dependencies": {
"Accord": "3.8.0",
"Accord.Math": "3.8.0"
},
"runtime": {
"lib/netstandard2.0/Accord.Statistics.dll": {
"assemblyVersion": "3.8.0.0",
"fileVersion": "3.8.0.6134"
}
}
},
"Apache.Arrow/2.0.0": {
"dependencies": {
"System.Buffers": "4.5.1",
"System.Memory": "4.5.3",
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
"System.Threading.Tasks.Extensions": "4.5.2"
},
"runtime": {
"lib/netcoreapp2.1/Apache.Arrow.dll": {
"assemblyVersion": "2.0.0.0",
"fileVersion": "2.0.0.0"
}
}
},
"ConsoleTableExt/3.3.0": {
"runtime": {
"lib/netstandard2.0/ConsoleTableExt.dll": {
"assemblyVersion": "3.1.9.0",
"fileVersion": "3.1.9.0"
}
}
},
"Dapper/2.0.143": {
"runtime": {
"lib/net5.0/Dapper.dll": {
"assemblyVersion": "2.0.0.0",
"fileVersion": "2.0.143.55328"
}
}
},
"MathNet.Numerics/5.0.0": {
"runtime": {
"lib/net6.0/MathNet.Numerics.dll": {
"assemblyVersion": "5.0.0.0",
"fileVersion": "5.0.0.0"
}
}
},
"Microsoft.Data.Analysis/0.20.1": {
"dependencies": {
"Apache.Arrow": "2.0.0",
"Microsoft.ML.DataView": "2.0.1",
"System.Buffers": "4.5.1",
"System.Memory": "4.5.3",
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
},
"runtime": {
"lib/netstandard2.0/Microsoft.Data.Analysis.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "0.2000.123.8101"
}
}
},
"Microsoft.Extensions.Configuration/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.Configuration.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.Configuration.Abstractions/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.Configuration.Abstractions.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.Configuration.FileExtensions/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Configuration": "7.0.0",
"Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
"Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
"Microsoft.Extensions.FileProviders.Physical": "7.0.0",
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.Configuration.FileExtensions.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.Configuration.Json/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Configuration": "7.0.0",
"Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
"Microsoft.Extensions.Configuration.FileExtensions": "7.0.0",
"Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
"System.Text.Json": "7.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.Configuration.Json.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.FileProviders.Abstractions/7.0.0": {
"dependencies": {
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.FileProviders.Abstractions.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.FileProviders.Physical/7.0.0": {
"dependencies": {
"Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
"Microsoft.Extensions.FileSystemGlobbing": "7.0.0",
"Microsoft.Extensions.Primitives": "7.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.FileProviders.Physical.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.FileSystemGlobbing/7.0.0": {
"runtime": {
"lib/net6.0/Microsoft.Extensions.FileSystemGlobbing.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.Extensions.Primitives/7.0.0": {
"dependencies": {
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
},
"runtime": {
"lib/net6.0/Microsoft.Extensions.Primitives.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"Microsoft.ML.DataView/2.0.1": {
"dependencies": {
"System.Collections.Immutable": "1.5.0",
"System.Memory": "4.5.3"
},
"runtime": {
"lib/netstandard2.0/Microsoft.ML.DataView.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "2.0.123.8101"
}
}
},
"Microsoft.NETCore.Platforms/3.1.0": {},
"Microsoft.Win32.Registry/4.7.0": {
"dependencies": {
"System.Security.AccessControl": "4.7.0",
"System.Security.Principal.Windows": "4.7.0"
}
},
"Microsoft.Win32.SystemEvents/7.0.0": {
"runtime": {
"lib/net6.0/Microsoft.Win32.SystemEvents.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
},
"runtimeTargets": {
"runtimes/win/lib/net6.0/Microsoft.Win32.SystemEvents.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"runtime.native.System.Data.SqlClient.sni/4.7.0": {
"dependencies": {
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": "4.4.0",
"runtime.win-x64.runtime.native.System.Data.SqlClient.sni": "4.4.0",
"runtime.win-x86.runtime.native.System.Data.SqlClient.sni": "4.4.0"
}
},
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"runtimeTargets": {
"runtimes/win-arm64/native/sni.dll": {
"rid": "win-arm64",
"assetType": "native",
"fileVersion": "4.6.25512.1"
}
}
},
"runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"runtimeTargets": {
"runtimes/win-x64/native/sni.dll": {
"rid": "win-x64",
"assetType": "native",
"fileVersion": "4.6.25512.1"
}
}
},
"runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"runtimeTargets": {
"runtimes/win-x86/native/sni.dll": {
"rid": "win-x86",
"assetType": "native",
"fileVersion": "4.6.25512.1"
}
}
},
"SqlServerBulkTools.Core/1.0.0": {
"dependencies": {
"System.Data.SqlClient": "4.8.6"
},
"runtime": {
"lib/netcoreapp2.1/SqlBulkTools.Core.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
},
"System.Buffers/4.5.1": {},
"System.Collections.Immutable/1.5.0": {},
"System.Data.SqlClient/4.8.6": {
"dependencies": {
"Microsoft.Win32.Registry": "4.7.0",
"System.Security.Principal.Windows": "4.7.0",
"runtime.native.System.Data.SqlClient.sni": "4.7.0"
},
"runtime": {
"lib/netcoreapp2.1/System.Data.SqlClient.dll": {
"assemblyVersion": "4.6.1.6",
"fileVersion": "4.700.23.52603"
}
},
"runtimeTargets": {
"runtimes/unix/lib/netcoreapp2.1/System.Data.SqlClient.dll": {
"rid": "unix",
"assetType": "runtime",
"assemblyVersion": "4.6.1.6",
"fileVersion": "4.700.23.52603"
},
"runtimes/win/lib/netcoreapp2.1/System.Data.SqlClient.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "4.6.1.6",
"fileVersion": "4.700.23.52603"
}
}
},
"System.Drawing.Common/7.0.0": {
"dependencies": {
"Microsoft.Win32.SystemEvents": "7.0.0"
},
"runtime": {
"lib/net6.0/System.Drawing.Common.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
},
"runtimeTargets": {
"runtimes/win/lib/net6.0/System.Drawing.Common.dll": {
"rid": "win",
"assetType": "runtime",
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"System.Memory/4.5.3": {},
"System.Runtime.CompilerServices.Unsafe/6.0.0": {},
"System.Security.AccessControl/4.7.0": {
"dependencies": {
"Microsoft.NETCore.Platforms": "3.1.0",
"System.Security.Principal.Windows": "4.7.0"
}
},
"System.Security.Principal.Windows/4.7.0": {},
"System.Text.Encodings.Web/7.0.0": {
"dependencies": {
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
},
"runtime": {
"lib/net6.0/System.Text.Encodings.Web.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
},
"runtimeTargets": {
"runtimes/browser/lib/net6.0/System.Text.Encodings.Web.dll": {
"rid": "browser",
"assetType": "runtime",
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"System.Text.Json/7.0.0": {
"dependencies": {
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
"System.Text.Encodings.Web": "7.0.0"
},
"runtime": {
"lib/net6.0/System.Text.Json.dll": {
"assemblyVersion": "7.0.0.0",
"fileVersion": "7.0.22.51805"
}
}
},
"System.Threading.Tasks.Extensions/4.5.2": {},
"LibraryPricer/1.0.0": {
"dependencies": {
"Accord.Statistics": "3.8.0",
"ConsoleTableExt": "3.3.0",
"Dapper": "2.0.143",
"MathNet.Numerics": "5.0.0",
"Microsoft.Data.Analysis": "0.20.1",
"Microsoft.Extensions.Configuration.Json": "7.0.0",
"SqlServerBulkTools.Core": "1.0.0",
"System.Data.SqlClient": "4.8.6",
"System.Drawing.Common": "7.0.0"
},
"runtime": {
"LibraryPricer.dll": {
"assemblyVersion": "1.0.0.0",
"fileVersion": "1.0.0.0"
}
}
}
}
},
"libraries": {
"Pricer/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"Accord/3.8.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-7kJrB570dO5ELim+2KWQNozuvWO9/BuZfZspdFy36fcWPNF2CEccblLuILeUlI8QJYd2DlBy0bfK8BlCx/uayA==",
"path": "accord/3.8.0",
"hashPath": "accord.3.8.0.nupkg.sha512"
},
"Accord.Math/3.8.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-K3dzeQjDIrwRnoTRoMOoIbul2Uc0B8cnEtdrSlirmIo37C+jVkmYpJzme/z4Kg99XR2Vj5W5TTNlhjn+AKR+8A==",
"path": "accord.math/3.8.0",
"hashPath": "accord.math.3.8.0.nupkg.sha512"
},
"Accord.Statistics/3.8.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-8WsmCE31Qdy3FmRvwtAY3F9/fJEi/6uyLQrhOvSI6pP6gpoaacmCrJRIphkGf2EB8gKHRWLAc4UXr1OOPHxkmQ==",
"path": "accord.statistics/3.8.0",
"hashPath": "accord.statistics.3.8.0.nupkg.sha512"
},
"Apache.Arrow/2.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-VR+F7g41WMJhr7WoZwwp05OrbYgM5Kmj3FwFXv1g0GgAYhEoCJz3L3qpllUWq9+X/rFKkFRZ2B8XcmsbaqGhrw==",
"path": "apache.arrow/2.0.0",
"hashPath": "apache.arrow.2.0.0.nupkg.sha512"
},
"ConsoleTableExt/3.3.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-kQ1P7mgDQbvEDXGt1sheOQbu37TidLnOv7RjcSCqW8m/weFtu4adMkN75YQHp4mSqquokGdBJOAKGiegLx2Nhg==",
"path": "consoletableext/3.3.0",
"hashPath": "consoletableext.3.3.0.nupkg.sha512"
},
"Dapper/2.0.143": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Vh0U+Fins3IpS7APUlrzga3+1mswWngB5fZ0xj4w+FQR5JhJzA5uHV5rSepkahvmshNZUA0YcHtae9vFQpiVTw==",
"path": "dapper/2.0.143",
"hashPath": "dapper.2.0.143.nupkg.sha512"
},
"MathNet.Numerics/5.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-pg1W2VwaEQMAiTpGK840hZgzavnqjlCMTVSbtVCXVyT+7AX4mc1o89SPv4TBlAjhgCOo9c1Y+jZ5m3ti2YgGgA==",
"path": "mathnet.numerics/5.0.0",
"hashPath": "mathnet.numerics.5.0.0.nupkg.sha512"
},
"Microsoft.Data.Analysis/0.20.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Or8x/g9oM+ti2bGqUmgip9Wxwr5/bQyNP9sQpke92i/3Bi+syq31kwJ4z8Dk93FECYT8IDETfcyT21J+F4rcdw==",
"path": "microsoft.data.analysis/0.20.1",
"hashPath": "microsoft.data.analysis.0.20.1.nupkg.sha512"
},
"Microsoft.Extensions.Configuration/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-tldQUBWt/xeH2K7/hMPPo5g8zuLc3Ro9I5d4o/XrxvxOCA2EZBtW7bCHHTc49fcBtvB8tLAb/Qsmfrq+2SJ4vA==",
"path": "microsoft.extensions.configuration/7.0.0",
"hashPath": "microsoft.extensions.configuration.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.Abstractions/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-f34u2eaqIjNO9YLHBz8rozVZ+TcFiFs0F3r7nUJd7FRkVSxk8u4OpoK226mi49MwexHOR2ibP9MFvRUaLilcQQ==",
"path": "microsoft.extensions.configuration.abstractions/7.0.0",
"hashPath": "microsoft.extensions.configuration.abstractions.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.FileExtensions/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-xk2lRJ1RDuqe57BmgvRPyCt6zyePKUmvT6iuXqiHR+/OIIgWVR8Ff5k2p6DwmqY8a17hx/OnrekEhziEIeQP6Q==",
"path": "microsoft.extensions.configuration.fileextensions/7.0.0",
"hashPath": "microsoft.extensions.configuration.fileextensions.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Configuration.Json/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-LDNYe3uw76W35Jci+be4LDf2lkQZe0A7EEYQVChFbc509CpZ4Iupod8li4PUXPBhEUOFI/rlQNf5xkzJRQGvtA==",
"path": "microsoft.extensions.configuration.json/7.0.0",
"hashPath": "microsoft.extensions.configuration.json.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.FileProviders.Abstractions/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-NyawiW9ZT/liQb34k9YqBSNPLuuPkrjMgQZ24Y/xXX1RoiBkLUdPMaQTmxhZ5TYu8ZKZ9qayzil75JX95vGQUg==",
"path": "microsoft.extensions.fileproviders.abstractions/7.0.0",
"hashPath": "microsoft.extensions.fileproviders.abstractions.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.FileProviders.Physical/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-K8D2MTR+EtzkbZ8z80LrG7Ur64R7ZZdRLt1J5cgpc/pUWl0C6IkAUapPuK28oionHueCPELUqq0oYEvZfalNdg==",
"path": "microsoft.extensions.fileproviders.physical/7.0.0",
"hashPath": "microsoft.extensions.fileproviders.physical.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.FileSystemGlobbing/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-2jONjKHiF+E92ynz2ZFcr9OvxIw+rTGMPEH+UZGeHTEComVav93jQUWGkso8yWwVBcEJGcNcZAaqY01FFJcj7w==",
"path": "microsoft.extensions.filesystemglobbing/7.0.0",
"hashPath": "microsoft.extensions.filesystemglobbing.7.0.0.nupkg.sha512"
},
"Microsoft.Extensions.Primitives/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==",
"path": "microsoft.extensions.primitives/7.0.0",
"hashPath": "microsoft.extensions.primitives.7.0.0.nupkg.sha512"
},
"Microsoft.ML.DataView/2.0.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-w+GkAXlxaut65Lm+Fbp34YTfp0/9jGRn9uiVlL7Lls0/v+4IJM7SMTHfhvegPU48cyI6K2kzaK9j2Va/labhTA==",
"path": "microsoft.ml.dataview/2.0.1",
"hashPath": "microsoft.ml.dataview.2.0.1.nupkg.sha512"
},
"Microsoft.NETCore.Platforms/3.1.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==",
"path": "microsoft.netcore.platforms/3.1.0",
"hashPath": "microsoft.netcore.platforms.3.1.0.nupkg.sha512"
},
"Microsoft.Win32.Registry/4.7.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-KSrRMb5vNi0CWSGG1++id2ZOs/1QhRqROt+qgbEAdQuGjGrFcl4AOl4/exGPUYz2wUnU42nvJqon1T3U0kPXLA==",
"path": "microsoft.win32.registry/4.7.0",
"hashPath": "microsoft.win32.registry.4.7.0.nupkg.sha512"
},
"Microsoft.Win32.SystemEvents/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-2nXPrhdAyAzir0gLl8Yy8S5Mnm/uBSQQA7jEsILOS1MTyS7DbmV1NgViMtvV1sfCD1ebITpNwb1NIinKeJgUVQ==",
"path": "microsoft.win32.systemevents/7.0.0",
"hashPath": "microsoft.win32.systemevents.7.0.0.nupkg.sha512"
},
"runtime.native.System.Data.SqlClient.sni/4.7.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-9kyFSIdN3T0qjDQ2R0HRXYIhS3l5psBzQi6qqhdLz+SzFyEy4sVxNOke+yyYv8Cu8rPER12c3RDjLT8wF3WBYQ==",
"path": "runtime.native.system.data.sqlclient.sni/4.7.0",
"hashPath": "runtime.native.system.data.sqlclient.sni.4.7.0.nupkg.sha512"
},
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-LbrynESTp3bm5O/+jGL8v0Qg5SJlTV08lpIpFesXjF6uGNMWqFnUQbYBJwZTeua6E/Y7FIM1C54Ey1btLWupdg==",
"path": "runtime.win-arm64.runtime.native.system.data.sqlclient.sni/4.4.0",
"hashPath": "runtime.win-arm64.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512"
},
"runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-38ugOfkYJqJoX9g6EYRlZB5U2ZJH51UP8ptxZgdpS07FgOEToV+lS11ouNK2PM12Pr6X/PpT5jK82G3DwH/SxQ==",
"path": "runtime.win-x64.runtime.native.system.data.sqlclient.sni/4.4.0",
"hashPath": "runtime.win-x64.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512"
},
"runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-YhEdSQUsTx+C8m8Bw7ar5/VesXvCFMItyZF7G1AUY+OM0VPZUOeAVpJ4Wl6fydBGUYZxojTDR3I6Bj/+BPkJNA==",
"path": "runtime.win-x86.runtime.native.system.data.sqlclient.sni/4.4.0",
"hashPath": "runtime.win-x86.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512"
},
"SqlServerBulkTools.Core/1.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ZSe6s6YDxOaYEkuMYJDiZ1vLMDX70sZ5Y0vZ1qGGaDtvendiYXLX0n+f5OjdC2iMae/b8gRLkLe1lzHqYvivOA==",
"path": "sqlserverbulktools.core/1.0.0",
"hashPath": "sqlserverbulktools.core.1.0.0.nupkg.sha512"
},
"System.Buffers/4.5.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==",
"path": "system.buffers/4.5.1",
"hashPath": "system.buffers.4.5.1.nupkg.sha512"
},
"System.Collections.Immutable/1.5.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-EXKiDFsChZW0RjrZ4FYHu9aW6+P4MCgEDCklsVseRfhoO0F+dXeMSsMRAlVXIo06kGJ/zv+2w1a2uc2+kxxSaQ==",
"path": "system.collections.immutable/1.5.0",
"hashPath": "system.collections.immutable.1.5.0.nupkg.sha512"
},
"System.Data.SqlClient/4.8.6": {
"type": "package",
"serviceable": true,
"sha512": "sha512-2Ij/LCaTQRyAi5lAv7UUTV9R2FobC8xN9mE0fXBZohum/xLl8IZVmE98Rq5ugQHjCgTBRKqpXRb4ORulRdA6Ig==",
"path": "system.data.sqlclient/4.8.6",
"hashPath": "system.data.sqlclient.4.8.6.nupkg.sha512"
},
"System.Drawing.Common/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-KIX+oBU38pxkKPxvLcLfIkOV5Ien8ReN78wro7OF5/erwcmortzeFx+iBswlh2Vz6gVne0khocQudGwaO1Ey6A==",
"path": "system.drawing.common/7.0.0",
"hashPath": "system.drawing.common.7.0.0.nupkg.sha512"
},
"System.Memory/4.5.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==",
"path": "system.memory/4.5.3",
"hashPath": "system.memory.4.5.3.nupkg.sha512"
},
"System.Runtime.CompilerServices.Unsafe/6.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==",
"path": "system.runtime.compilerservices.unsafe/6.0.0",
"hashPath": "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512"
},
"System.Security.AccessControl/4.7.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==",
"path": "system.security.accesscontrol/4.7.0",
"hashPath": "system.security.accesscontrol.4.7.0.nupkg.sha512"
},
"System.Security.Principal.Windows/4.7.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==",
"path": "system.security.principal.windows/4.7.0",
"hashPath": "system.security.principal.windows.4.7.0.nupkg.sha512"
},
"System.Text.Encodings.Web/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==",
"path": "system.text.encodings.web/7.0.0",
"hashPath": "system.text.encodings.web.7.0.0.nupkg.sha512"
},
"System.Text.Json/7.0.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==",
"path": "system.text.json/7.0.0",
"hashPath": "system.text.json.7.0.0.nupkg.sha512"
},
"System.Threading.Tasks.Extensions/4.5.2": {
"type": "package",
"serviceable": true,
"sha512": "sha512-BG/TNxDFv0svAzx8OiMXDlsHfGw623BZ8tCXw4YLhDFDvDhNUEV58jKYMGRnkbJNm7c3JNNJDiN7JBMzxRBR2w==",
"path": "system.threading.tasks.extensions/4.5.2",
"hashPath": "system.threading.tasks.extensions.4.5.2.nupkg.sha512"
},
"LibraryPricer/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
}
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,15 @@
{
"runtimeOptions": {
"tfm": "net6.0",
"frameworks": [
{
"name": "Microsoft.NETCore.App",
"version": "6.0.0"
},
{
"name": "Microsoft.WindowsDesktop.App",
"version": "6.0.0"
}
]
}
}

View File

@@ -0,0 +1,14 @@
{
"ConnectionStrings": {
"FirstSolutionDB": "Data Source=26.69.45.60;Initial Catalog=FirstSolutionDB;Persist Security Info=True;User ID=sa;Password=Skyline72"
},
"exclude": [
"**/bin",
"**/bower_components",
"**/jspm_packages",
"**/node_modules",
"**/obj",
"**/platforms"
]
}

View File

@@ -0,0 +1,24 @@
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="500" viewBox="0 0 900 500">
<rect x="0" y="0" width="100%" height="100%" fill="white"/>
<text x="70" y="30" font-family="Segoe UI, Arial" font-size="18" fill="#111">Distribuzione rendimenti vs Bid - IT0006767633</text>
<line x1="70" y1="50" x2="70" y2="440" stroke="#333" stroke-width="1"/>
<line x1="70" y1="440" x2="870" y2="440" stroke="#333" stroke-width="1"/>
<rect x="72" y="438.6219081272085" width="76" height="1.3780918727915195" fill="#D1644A"/>
<rect x="152" y="433.26266195524147" width="76" height="6.737338044758539" fill="#D1644A"/>
<rect x="232" y="425.7086768747546" width="76" height="14.291323125245386" fill="#D1644A"/>
<rect x="312" y="421.8806438947782" width="76" height="18.11935610522183" fill="#D1644A"/>
<rect x="392" y="421.9316843345112" width="76" height="18.06831566548881" fill="#D1644A"/>
<rect x="472" y="423.2587357675697" width="76" height="16.74126423243031" fill="#D1644A"/>
<rect x="552" y="426.93364742834706" width="76" height="13.066352571652926" fill="#D1644A"/>
<rect x="632" y="429.23046721633295" width="76" height="10.76953278366706" fill="#D1644A"/>
<rect x="712" y="418.767177071064" width="76" height="21.232822928936002" fill="#D1644A"/>
<rect x="792" y="50" width="76" height="390" fill="#4A7BD1"/>
<text x="70" y="475" font-family="Segoe UI, Arial" font-size="12" fill="#333">-79.05%</text>
<line x1="750.8096809680968" y1="50" x2="750.8096809680968" y2="440" stroke="#999" stroke-dasharray="4,3"/>
<text x="738.8096809680968" y="475" font-family="Segoe UI, Arial" font-size="12" fill="#333">0%</text>
<text x="810" y="475" font-family="Segoe UI, Arial" font-size="12" fill="#333">13.84%</text>
<text x="730" y="480" font-family="Segoe UI, Arial" font-size="12" fill="#333">Rendimento (%)</text>
<text x="40" y="445" font-family="Segoe UI, Arial" font-size="12" fill="#333">0</text>
<text x="30" y="55" font-family="Segoe UI, Arial" font-size="12" fill="#333">7641</text>
<text x="15" y="40" font-family="Segoe UI, Arial" font-size="12" fill="#333">Conteggi</text>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

Some files were not shown because too many files have changed in this diff Show More