Initial commit
This commit is contained in:
896
LibraryPricer/CalcFunctions.cs
Normal file
896
LibraryPricer/CalcFunctions.cs
Normal 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 nell’oggetto
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
57
LibraryPricer/ConsoleSpinner.cs
Normal file
57
LibraryPricer/ConsoleSpinner.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
382
LibraryPricer/FairValueComparison.cs
Normal file
382
LibraryPricer/FairValueComparison.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
16
LibraryPricer/FairValues.cs
Normal file
16
LibraryPricer/FairValues.cs
Normal 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; }
|
||||
}
|
||||
|
||||
}
|
||||
40
LibraryPricer/GbmEngine.cs
Normal file
40
LibraryPricer/GbmEngine.cs
Normal 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();
|
||||
}
|
||||
}
|
||||
}
|
||||
22
LibraryPricer/LibraryPricer.csproj
Normal file
22
LibraryPricer/LibraryPricer.csproj
Normal 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>
|
||||
56
LibraryPricer/Models/DetailsCTFModel.cs
Normal file
56
LibraryPricer/Models/DetailsCTFModel.cs
Normal 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; }
|
||||
}
|
||||
}
|
||||
27
LibraryPricer/Models/DetailsEventModel.cs
Normal file
27
LibraryPricer/Models/DetailsEventModel.cs
Normal 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; }
|
||||
}
|
||||
}
|
||||
31
LibraryPricer/Models/DetailsULModel.cs
Normal file
31
LibraryPricer/Models/DetailsULModel.cs
Normal 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!)
|
||||
}
|
||||
}
|
||||
20
LibraryPricer/Models/HistPriceULModel.cs
Normal file
20
LibraryPricer/Models/HistPriceULModel.cs
Normal 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; }
|
||||
|
||||
}
|
||||
}
|
||||
693
LibraryPricer/PayoffEngine.cs
Normal file
693
LibraryPricer/PayoffEngine.cs
Normal 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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
15
LibraryPricer/PrezziSottostanti.cs
Normal file
15
LibraryPricer/PrezziSottostanti.cs
Normal 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; }
|
||||
}
|
||||
}
|
||||
7
LibraryPricer/UnderlyingStats.cs
Normal file
7
LibraryPricer/UnderlyingStats.cs
Normal 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))
|
||||
}
|
||||
7
LibraryPricer/bin/Debug/net6.0/Accord.dll.config
Normal file
7
LibraryPricer/bin/Debug/net6.0/Accord.dll.config
Normal 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>
|
||||
639
LibraryPricer/bin/Debug/net6.0/LibraryPricer.deps.json
Normal file
639
LibraryPricer/bin/Debug/net6.0/LibraryPricer.deps.json
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
LibraryPricer/bin/Debug/net6.0/LibraryPricer.dll
Normal file
BIN
LibraryPricer/bin/Debug/net6.0/LibraryPricer.dll
Normal file
Binary file not shown.
BIN
LibraryPricer/bin/Debug/net6.0/LibraryPricer.pdb
Normal file
BIN
LibraryPricer/bin/Debug/net6.0/LibraryPricer.pdb
Normal file
Binary file not shown.
7
LibraryPricer/bin/Lite/net6.0/Accord.dll.config
Normal file
7
LibraryPricer/bin/Lite/net6.0/Accord.dll.config
Normal 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>
|
||||
589
LibraryPricer/bin/Lite/net6.0/LibraryPricer.deps.json
Normal file
589
LibraryPricer/bin/Lite/net6.0/LibraryPricer.deps.json
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
LibraryPricer/bin/Lite/net6.0/LibraryPricer.dll
Normal file
BIN
LibraryPricer/bin/Lite/net6.0/LibraryPricer.dll
Normal file
Binary file not shown.
BIN
LibraryPricer/bin/Lite/net6.0/LibraryPricer.pdb
Normal file
BIN
LibraryPricer/bin/Lite/net6.0/LibraryPricer.pdb
Normal file
Binary file not shown.
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
|
||||
22
LibraryPricer/obj/Debug/net6.0/LibraryPricer.AssemblyInfo.cs
Normal file
22
LibraryPricer/obj/Debug/net6.0/LibraryPricer.AssemblyInfo.cs
Normal 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.
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
0bfc16e5a8c9f323991ffb60041597ab8f6a91bf73e257708d3f6c34c8bddcca
|
||||
@@ -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 =
|
||||
@@ -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;
|
||||
BIN
LibraryPricer/obj/Debug/net6.0/LibraryPricer.assets.cache
Normal file
BIN
LibraryPricer/obj/Debug/net6.0/LibraryPricer.assets.cache
Normal file
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
f9f184781ead26f4ae022942074dcb3fef81f153b6c40356507a4b03bc41420e
|
||||
@@ -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
|
||||
BIN
LibraryPricer/obj/Debug/net6.0/LibraryPricer.dll
Normal file
BIN
LibraryPricer/obj/Debug/net6.0/LibraryPricer.dll
Normal file
Binary file not shown.
BIN
LibraryPricer/obj/Debug/net6.0/LibraryPricer.pdb
Normal file
BIN
LibraryPricer/obj/Debug/net6.0/LibraryPricer.pdb
Normal file
Binary file not shown.
BIN
LibraryPricer/obj/Debug/net6.0/ref/LibraryPricer.dll
Normal file
BIN
LibraryPricer/obj/Debug/net6.0/ref/LibraryPricer.dll
Normal file
Binary file not shown.
BIN
LibraryPricer/obj/Debug/net6.0/refint/LibraryPricer.dll
Normal file
BIN
LibraryPricer/obj/Debug/net6.0/refint/LibraryPricer.dll
Normal file
Binary file not shown.
111
LibraryPricer/obj/LibraryPricer.csproj.nuget.dgspec.json
Normal file
111
LibraryPricer/obj/LibraryPricer.csproj.nuget.dgspec.json
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
16
LibraryPricer/obj/LibraryPricer.csproj.nuget.g.props
Normal file
16
LibraryPricer/obj/LibraryPricer.csproj.nuget.g.props
Normal 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>
|
||||
7
LibraryPricer/obj/LibraryPricer.csproj.nuget.g.targets
Normal file
7
LibraryPricer/obj/LibraryPricer.csproj.nuget.g.targets
Normal 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>
|
||||
@@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
|
||||
22
LibraryPricer/obj/Lite/net6.0/LibraryPricer.AssemblyInfo.cs
Normal file
22
LibraryPricer/obj/Lite/net6.0/LibraryPricer.AssemblyInfo.cs
Normal 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.
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
d8587d303fca4f8a0618f823f17b8946496a830cfbbc7899b4143b6e80803a1b
|
||||
@@ -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 =
|
||||
@@ -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;
|
||||
BIN
LibraryPricer/obj/Lite/net6.0/LibraryPricer.assets.cache
Normal file
BIN
LibraryPricer/obj/Lite/net6.0/LibraryPricer.assets.cache
Normal file
Binary file not shown.
Binary file not shown.
@@ -0,0 +1 @@
|
||||
b243d8f5ff26b05a1ef7620e76677dd59042c85bf50f27ee35c0e2bf048cdf88
|
||||
@@ -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
|
||||
BIN
LibraryPricer/obj/Lite/net6.0/LibraryPricer.dll
Normal file
BIN
LibraryPricer/obj/Lite/net6.0/LibraryPricer.dll
Normal file
Binary file not shown.
BIN
LibraryPricer/obj/Lite/net6.0/LibraryPricer.pdb
Normal file
BIN
LibraryPricer/obj/Lite/net6.0/LibraryPricer.pdb
Normal file
Binary file not shown.
BIN
LibraryPricer/obj/Lite/net6.0/ref/LibraryPricer.dll
Normal file
BIN
LibraryPricer/obj/Lite/net6.0/ref/LibraryPricer.dll
Normal file
Binary file not shown.
BIN
LibraryPricer/obj/Lite/net6.0/refint/LibraryPricer.dll
Normal file
BIN
LibraryPricer/obj/Lite/net6.0/refint/LibraryPricer.dll
Normal file
Binary file not shown.
1812
LibraryPricer/obj/project.assets.json
Normal file
1812
LibraryPricer/obj/project.assets.json
Normal file
File diff suppressed because it is too large
Load Diff
45
LibraryPricer/obj/project.nuget.cache
Normal file
45
LibraryPricer/obj/project.nuget.cache
Normal 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": []
|
||||
}
|
||||
Reference in New Issue
Block a user