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": []
}