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": []
|
||||||
|
}
|
||||||
67
Pricer/Pricer.csproj
Normal file
67
Pricer/Pricer.csproj
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<OutputType>Exe</OutputType>
|
||||||
|
<TargetFramework>net6.0-windows7.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<UseWindowsForms>true</UseWindowsForms>
|
||||||
|
<Nullable>disable</Nullable>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition="'$(Configuration)'=='Lite'">
|
||||||
|
<StartupObject>PricerAppLite.ProgramLite</StartupObject>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Content Include="pricer.ico" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="ConsoleTableExt" Version="3.3.0" />
|
||||||
|
<PackageReference Include="MathNet.Numerics" Version="5.0.0" />
|
||||||
|
<PackageReference Include="Microsoft.Data.Analysis" Version="0.20.1" />
|
||||||
|
<PackageReference Include="System.Data.SqlClient" Version="4.8.6" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<ProjectReference Include="..\LibraryPricer\LibraryPricer.csproj" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Remove="Program.Lite.cs" />
|
||||||
|
<None Include="Program.Lite.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Update="Properties\Resources.Designer.cs">
|
||||||
|
<DesignTime>True</DesignTime>
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Resources.resx</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Update="Properties\Settings.Designer.cs">
|
||||||
|
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||||
|
<AutoGen>True</AutoGen>
|
||||||
|
<DependentUpon>Settings.settings</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<EmbeddedResource Update="Properties\Resources.resx">
|
||||||
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||||
|
</EmbeddedResource>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<None Update="appsettings.json">
|
||||||
|
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
||||||
|
</None>
|
||||||
|
<None Update="Properties\Settings.settings">
|
||||||
|
<Generator>SettingsSingleFileGenerator</Generator>
|
||||||
|
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||||
|
</None>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</Project>
|
||||||
649
Pricer/Program.Lite.Api.cs
Normal file
649
Pricer/Program.Lite.Api.cs
Normal file
@@ -0,0 +1,649 @@
|
|||||||
|
using System;
|
||||||
|
using System.IO;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net.Http;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Text.Json;
|
||||||
|
using ConsoleTableExt;
|
||||||
|
using LibraryPricer;
|
||||||
|
using Microsoft.SqlServer.Server;
|
||||||
|
using System.Data;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using static LibraryPricer.CalcFunctions;
|
||||||
|
using MathNet.Numerics.Optimization;
|
||||||
|
using System.Reflection;
|
||||||
|
using MathNet.Numerics;
|
||||||
|
using MathNet.Numerics.Statistics;
|
||||||
|
using LibraryPricer.Payoffs;
|
||||||
|
using Accord.Math;
|
||||||
|
|
||||||
|
namespace PricerAppLite // Note: actual namespace depends on the project name.
|
||||||
|
{
|
||||||
|
internal class ProgramLite
|
||||||
|
{
|
||||||
|
static void Main(string[] args)
|
||||||
|
{
|
||||||
|
string version = "2.2 - [12/06/2025]";
|
||||||
|
Console.Title = $"Pricer v.{version}";
|
||||||
|
ManualRun(args);
|
||||||
|
}
|
||||||
|
public static void ManualRun(string[] args)
|
||||||
|
{
|
||||||
|
bool showSimulationDebug = args.Any(a => a.Equals("--sim-debug", StringComparison.OrdinalIgnoreCase));
|
||||||
|
|
||||||
|
// Input Isin da elaborare
|
||||||
|
Console.WriteLine("Inserire ISIN (default IT0006767633): "); // CH0456761649 (Airbag) , XS2306677134 (Sigma), IT0006746074 (Relief), CH0392531056 (TwinWin)
|
||||||
|
string? Isin = Console.ReadLine();
|
||||||
|
if (String.IsNullOrEmpty(Isin)) Isin = "IT0006767633";
|
||||||
|
|
||||||
|
// Input numero prezzi eod per calcolo matrice correlazione
|
||||||
|
Console.WriteLine("Num. Prezzi EOD per calcolo matrice correlazione e volatilità (default 252): ");
|
||||||
|
string? PrezziEOD = Console.ReadLine();
|
||||||
|
int numPrezziEOD = 0;
|
||||||
|
if (String.IsNullOrEmpty(PrezziEOD)) numPrezziEOD = 252;
|
||||||
|
else numPrezziEOD = Convert.ToInt32(PrezziEOD);
|
||||||
|
|
||||||
|
// Carica dati da API
|
||||||
|
PricerApiResponse apiData = LoadApiData(Isin, numPrezziEOD);
|
||||||
|
|
||||||
|
// Verifica Isin sia valido per il pricer
|
||||||
|
if (!string.IsNullOrEmpty(apiData.ISINCheck) && apiData.ISINCheck == "KO")
|
||||||
|
{
|
||||||
|
Console.WriteLine($"ISIN {Isin} non processabile!");
|
||||||
|
Console.WriteLine("Certificati nel pricer devono avere le seguenti caratteristiche : ");
|
||||||
|
Console.WriteLine("- Categoria: Coupon,StepUp,Bonus (con Barriera Discreta)");
|
||||||
|
Console.WriteLine("- Status: In Quotazione");
|
||||||
|
Console.WriteLine("- Direction: Long");
|
||||||
|
Console.WriteLine("- Basket Type : Worst");
|
||||||
|
Console.WriteLine("- Currency : EUR");
|
||||||
|
Console.WriteLine("- CedolaVariabile : FALSE");
|
||||||
|
Console.WriteLine("- Darwin : FALSE");
|
||||||
|
Console.WriteLine("- Domino : FALSE");
|
||||||
|
Console.WriteLine("- Magnet : FALSE");
|
||||||
|
RestartOrExit(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine("Considerare i dividendi ? s/n (default s): ");
|
||||||
|
string? IsDividend = Console.ReadLine();
|
||||||
|
if (String.IsNullOrEmpty(IsDividend)) IsDividend = "s";
|
||||||
|
|
||||||
|
int num_sims = 0;
|
||||||
|
Console.WriteLine("Inserire # simulazioni montecarlo (default = 10000) : ");
|
||||||
|
string? numsim = Console.ReadLine();
|
||||||
|
if (String.IsNullOrEmpty(numsim)) num_sims = 10000;
|
||||||
|
else num_sims = Convert.ToInt32(numsim);
|
||||||
|
|
||||||
|
// Carica dettagli sottostanti
|
||||||
|
var detailsULModel = apiData.DetailsUL?.ToArray() ?? Array.Empty<DetailsULItem>();
|
||||||
|
|
||||||
|
if (detailsULModel.Length == 0)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Nessun dettaglio sottostante disponibile.");
|
||||||
|
RestartOrExit(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calcolo matrice di correlazione e volatilita da prezzi EOD
|
||||||
|
var pricesById = BuildPriceSeries(apiData.HistPriceUL, numPrezziEOD);
|
||||||
|
double[,] corrMatrix = BuildCorrelationMatrix(detailsULModel, pricesById, numPrezziEOD);
|
||||||
|
double[] Volatility = BuildVolatility(detailsULModel, pricesById, numPrezziEOD);
|
||||||
|
|
||||||
|
// Visualizza matrice di correlazione in Console
|
||||||
|
string[] NomiSottostanti = detailsULModel.AsEnumerable().Select(r => r.Sottostante).ToArray();
|
||||||
|
ConsoleTableBuilder.From(CalcFunctions.ArraytoDatatable(corrMatrix, NomiSottostanti))
|
||||||
|
.WithTitle($"Matrix Correl {Isin}", ConsoleColor.Yellow, ConsoleColor.DarkGray)
|
||||||
|
.ExportAndWriteLine();
|
||||||
|
|
||||||
|
// Carica dettagli certificato
|
||||||
|
var detailsCTFModel = apiData.DetailsCTF?.ToArray() ?? Array.Empty<DetailsCTFItem>();
|
||||||
|
if (detailsCTFModel.Length == 0)
|
||||||
|
{
|
||||||
|
Console.WriteLine("Nessun dettaglio certificato disponibile.");
|
||||||
|
RestartOrExit(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Carica dettagli eventi
|
||||||
|
var detailsEventModel = apiData.DetailsEvent?.ToArray() ?? Array.Empty<DetailsEventItem>();
|
||||||
|
var detailsEventExDateModel = apiData.DetailsEventExDate?.ToArray() ?? Array.Empty<DetailsEventExDateItem>();
|
||||||
|
|
||||||
|
// Inizializzazione parametri input per calcolo FairValue da detailsCTFModel
|
||||||
|
double TassoInteresse = detailsCTFModel.AsEnumerable().Select(r => r.TassoInteresse).FirstOrDefault();
|
||||||
|
DateTime baseDate = detailsCTFModel.AsEnumerable().Select(r => r.LastDatePrice).FirstOrDefault().Date;
|
||||||
|
DateTime maturityDate = detailsCTFModel.AsEnumerable().Select(r => r.Maturity_Date).FirstOrDefault().Date;
|
||||||
|
int DaysToMaturity = CountBusinessDaysInclusive(baseDate, maturityDate);
|
||||||
|
string? PDI_Style = detailsCTFModel.AsEnumerable().Select(r => r.PDI_Style).FirstOrDefault();
|
||||||
|
double PDI_Strike = detailsCTFModel.AsEnumerable().Select(r => r.PDI_Strike).FirstOrDefault();
|
||||||
|
double PDI_Barrier = Math.Round(detailsCTFModel.AsEnumerable().Select(r => r.PDI_Barrier).FirstOrDefault(), 4);
|
||||||
|
double CapitalValue = detailsCTFModel.AsEnumerable().Select(r => r.CapitalValue).FirstOrDefault();
|
||||||
|
double NominalAmount = detailsCTFModel.AsEnumerable().Select(r => r.NominalAmount).FirstOrDefault();
|
||||||
|
double Bid = detailsCTFModel.AsEnumerable().Select(r => r.Bid).FirstOrDefault();
|
||||||
|
double Ask = detailsCTFModel.AsEnumerable().Select(r => r.Ask).FirstOrDefault();
|
||||||
|
DateTime LastDatePrice = detailsCTFModel.AsEnumerable().Select(r => r.LastDatePrice).FirstOrDefault();
|
||||||
|
double CouponInMemory = detailsCTFModel.AsEnumerable().Select(r => r.CouponInMemory).FirstOrDefault();
|
||||||
|
double ProtMinVal = detailsCTFModel.AsEnumerable().Select(r => r.ProtMinVal).FirstOrDefault();
|
||||||
|
int AirBag = detailsCTFModel.AsEnumerable().Select(r => r.AirBag ? 1 : 0).FirstOrDefault();
|
||||||
|
double FattoreAirbag = detailsCTFModel.AsEnumerable().Select(r => r.FattoreAirbag).FirstOrDefault();
|
||||||
|
int OneStar = detailsCTFModel.AsEnumerable().Select(r => r.OneStar ? 1 : 0).FirstOrDefault();
|
||||||
|
double TriggerOnestar = Math.Round(detailsCTFModel.AsEnumerable().Select(r => r.TriggerOnestar).FirstOrDefault(),4);
|
||||||
|
int TwinWin = detailsCTFModel.AsEnumerable().Select(r => r.TwinWin ? 1 : 0).FirstOrDefault();
|
||||||
|
int Sigma = detailsCTFModel.AsEnumerable().Select(r => r.Sigma ? 1 : 0).FirstOrDefault();
|
||||||
|
int Relief = detailsCTFModel.AsEnumerable().Select(r => r.Relief ? 1 : 0).FirstOrDefault();
|
||||||
|
int Domino = detailsCTFModel.AsEnumerable().Select(r => r.Domino ? 1 : 0).FirstOrDefault();
|
||||||
|
string Category = detailsCTFModel.AsEnumerable().Select(r => r.Category).FirstOrDefault();
|
||||||
|
double CAP = detailsCTFModel.AsEnumerable().Select(r => r.CAP ?? 0.0).FirstOrDefault();
|
||||||
|
double Leva = detailsCTFModel.AsEnumerable().Select(r => r.Leva ?? 0.0).FirstOrDefault();
|
||||||
|
|
||||||
|
// Inizializzazione parametri input per calcolo FairValue da detailsULModel
|
||||||
|
double[] PricesUL = detailsULModel.AsEnumerable().Select(r => r.SpotPriceNormalized).ToArray();
|
||||||
|
double[] Dividends = detailsULModel.AsEnumerable().Select(r => r.Dividend).ToArray();
|
||||||
|
if (IsDividend != "s") System.Array.Clear(Dividends, 0, Dividends.Length); // non usa i dividendi se non richiesto
|
||||||
|
//double[] Volatility = detailsULModel.AsEnumerable().Select(r => r.Volatility).ToArray();
|
||||||
|
int numSottostanti = detailsULModel.Length;
|
||||||
|
|
||||||
|
// Inizializzazione parametri input per calcolo FairValue da detailsEventModel
|
||||||
|
int[] DaysToObs = detailsEventModel.Select(r => CountBusinessDaysInclusive(baseDate, r.ObsDate.Date)).ToArray();
|
||||||
|
int[] DaysToExDate = detailsEventExDateModel.Select(r => CountBusinessDaysInclusive(baseDate, r.ExDate.Date)).ToArray();
|
||||||
|
double[] DaysToObsYFract = DaysToObs.Select(r => r / 252.0).ToArray();
|
||||||
|
double[] DaysToExDateYFract = DaysToExDate.Select(r => r / 252.0).ToArray();
|
||||||
|
double[] CouponValues = detailsEventModel.Select(r => r.CouponValue).ToArray();
|
||||||
|
double[] CouponTriggers = detailsEventModel.Select(r => r.CouponTrigger).ToArray();
|
||||||
|
double[] AutocallValues = detailsEventModel.Select(r => r.AutocallValue).ToArray();
|
||||||
|
double[] AutocallTriggers = detailsEventModel.Select(r => r.AutocallTrigger).ToArray();
|
||||||
|
int[] MemoryFlags = detailsEventModel.Select(r => r.Memory ? 1 : 0).ToArray();
|
||||||
|
int numEventi = detailsEventModel.Length;
|
||||||
|
|
||||||
|
// Visualizza dati input Sottostanti
|
||||||
|
DataTable dtInputDataUL = new DataTable();
|
||||||
|
dtInputDataUL.Columns.Add("Sottostante", typeof(string));
|
||||||
|
dtInputDataUL.Columns.Add("Price", typeof(double));
|
||||||
|
dtInputDataUL.Columns.Add("Dividend", typeof(double));
|
||||||
|
dtInputDataUL.Columns.Add("Volatility", typeof(double));
|
||||||
|
|
||||||
|
for (int i = 0; i < numSottostanti; i++)
|
||||||
|
{
|
||||||
|
dtInputDataUL.Rows.Add(
|
||||||
|
NomiSottostanti[i],
|
||||||
|
Math.Round(PricesUL[i], 4),
|
||||||
|
Math.Round(Dividends[i], 4),
|
||||||
|
Math.Round(Volatility[i], 4)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine();
|
||||||
|
ConsoleTableBuilder.From(dtInputDataUL)
|
||||||
|
.WithTitle($"Dati Input Sottostanti {Isin}", ConsoleColor.Cyan, ConsoleColor.DarkGray)
|
||||||
|
.ExportAndWriteLine();
|
||||||
|
|
||||||
|
// Visualizza dati input Certificato
|
||||||
|
DataTable dtInputDataCTF = new DataTable();
|
||||||
|
dtInputDataCTF.Columns.Add("TassoInteresse", typeof(double));
|
||||||
|
dtInputDataCTF.Columns.Add("DaysToMaturity", typeof(double));
|
||||||
|
dtInputDataCTF.Columns.Add("PDI Style", typeof(string));
|
||||||
|
dtInputDataCTF.Columns.Add("PDI Barrier", typeof(double));
|
||||||
|
dtInputDataCTF.Columns.Add("Capital Value", typeof(double));
|
||||||
|
dtInputDataCTF.Columns.Add("Coupon In Memoria", typeof(double));
|
||||||
|
dtInputDataCTF.Columns.Add("Prot Min Val %", typeof(double));
|
||||||
|
dtInputDataCTF.Rows.Add(Math.Round(TassoInteresse, 4), DaysToMaturity, PDI_Style, PDI_Barrier, Math.Round(CapitalValue * NominalAmount, 5), Math.Round(CouponInMemory, 5), Math.Round(ProtMinVal, 3));
|
||||||
|
Console.WriteLine();
|
||||||
|
ConsoleTableBuilder.From(dtInputDataCTF)
|
||||||
|
.WithTitle($"Dati Input Certificato {Isin}", ConsoleColor.Green, ConsoleColor.DarkGray)
|
||||||
|
.ExportAndWriteLine();
|
||||||
|
|
||||||
|
// Visualizza dati input Flag Certificato
|
||||||
|
DataTable dtInputFlagCTF = new DataTable();
|
||||||
|
dtInputFlagCTF.Columns.Add("AirBag", typeof(int));
|
||||||
|
dtInputFlagCTF.Columns.Add("Fattore Airbag", typeof(double));
|
||||||
|
dtInputFlagCTF.Columns.Add("OneStar", typeof(int));
|
||||||
|
dtInputFlagCTF.Columns.Add("TriggerOnestar", typeof(double));
|
||||||
|
dtInputFlagCTF.Columns.Add("TwinWin", typeof(int));
|
||||||
|
dtInputFlagCTF.Columns.Add("Sigma", typeof(int));
|
||||||
|
dtInputFlagCTF.Columns.Add("Relief", typeof(int));
|
||||||
|
//dtInputFlagCTF.Columns.Add("Domino", typeof(int));
|
||||||
|
dtInputFlagCTF.Rows.Add(AirBag, Math.Round(FattoreAirbag, 3), OneStar, TriggerOnestar, TwinWin, Sigma, Relief);
|
||||||
|
Console.WriteLine();
|
||||||
|
ConsoleTableBuilder.From(dtInputFlagCTF)
|
||||||
|
.WithTitle($"Dati Input Flags {Isin}", ConsoleColor.DarkCyan, ConsoleColor.DarkGray)
|
||||||
|
.ExportAndWriteLine();
|
||||||
|
|
||||||
|
|
||||||
|
// Visualizza dati input Eventi
|
||||||
|
DataTable dtInputDataEvents = new DataTable();
|
||||||
|
dtInputDataEvents.Columns.Add("DaysToObs.", typeof(int));
|
||||||
|
//dtInputDataEvents.Columns.Add("DaysToExDate", typeof(int)); // Solo Debug nuova colonna
|
||||||
|
dtInputDataEvents.Columns.Add("DaysToObsYFract", typeof(double));
|
||||||
|
dtInputDataEvents.Columns.Add("Cpn. Value", typeof(double));
|
||||||
|
dtInputDataEvents.Columns.Add("Cpn. Trigger", typeof(double));
|
||||||
|
dtInputDataEvents.Columns.Add("Autoc. Value", typeof(double));
|
||||||
|
dtInputDataEvents.Columns.Add("Autoc. Trigger", typeof(double));
|
||||||
|
dtInputDataEvents.Columns.Add("Memory", typeof(int));
|
||||||
|
|
||||||
|
for (int i = 0; i < numEventi; i++)
|
||||||
|
{
|
||||||
|
int exDate = (i < DaysToExDate.Length) ? DaysToExDate[i] : -1;
|
||||||
|
|
||||||
|
dtInputDataEvents.Rows.Add(
|
||||||
|
DaysToObs[i],
|
||||||
|
//exDate,
|
||||||
|
Math.Round(DaysToObsYFract[i], 4),
|
||||||
|
Math.Round(CouponValues[i] * NominalAmount, 6),
|
||||||
|
Math.Round(CouponTriggers[i], 6),
|
||||||
|
Math.Round(AutocallValues[i] * NominalAmount, 6),
|
||||||
|
Math.Round(AutocallTriggers[i], 6),
|
||||||
|
MemoryFlags[i]
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
Console.WriteLine();
|
||||||
|
ConsoleTableBuilder.From(dtInputDataEvents)
|
||||||
|
.WithTitle($"Dati Input Eventi {Isin}", ConsoleColor.DarkYellow, ConsoleColor.DarkGray)
|
||||||
|
.ExportAndWriteLine();
|
||||||
|
|
||||||
|
Console.WriteLine("Elaborazione Fair value in corso...");
|
||||||
|
|
||||||
|
// Costruzione del contesto originale dai dati caricati
|
||||||
|
var contextOriginal = new PayoffContext
|
||||||
|
{
|
||||||
|
DaysToMaturity = DaysToMaturity,
|
||||||
|
r = TassoInteresse,
|
||||||
|
CapitalValue = CapitalValue,
|
||||||
|
ProtMinVal = ProtMinVal,
|
||||||
|
PDI_Barrier = PDI_Barrier,
|
||||||
|
PDI_Style = PDI_Style,
|
||||||
|
CouponInMemory = CouponInMemory,
|
||||||
|
DaysToObsYFract = DaysToObsYFract,
|
||||||
|
CouponTriggers = CouponTriggers,
|
||||||
|
CouponValues = CouponValues,
|
||||||
|
AutocallTriggers = AutocallTriggers,
|
||||||
|
AutocallValues = AutocallValues,
|
||||||
|
MemoryFlags = MemoryFlags,
|
||||||
|
Caso = GetCasoString(AirBag, Sigma, Relief, TwinWin, OneStar),
|
||||||
|
PDI_Strike = PDI_Strike,
|
||||||
|
FattoreAirbag = FattoreAirbag,
|
||||||
|
TriggerOneStar = TriggerOnestar,
|
||||||
|
CAP = CAP,
|
||||||
|
DaysToObs = DaysToObs,
|
||||||
|
Airbag = AirBag,
|
||||||
|
Sigma = Sigma,
|
||||||
|
Relief = Relief,
|
||||||
|
TwinWin = TwinWin,
|
||||||
|
OneStar = OneStar,
|
||||||
|
Leva = Leva,
|
||||||
|
Volatility = Volatility,
|
||||||
|
PricesUL = PricesUL,
|
||||||
|
NominalAmount = NominalAmount,
|
||||||
|
EnableDebug = showSimulationDebug
|
||||||
|
};
|
||||||
|
|
||||||
|
// Cloni distinti per ogni motore
|
||||||
|
var contextForFairValue = FairValueComparison.CloneContext(contextOriginal);
|
||||||
|
var contextForArray = FairValueComparison.CloneContext(contextOriginal);
|
||||||
|
var contextForCompare = FairValueComparison.CloneContext(contextOriginal);
|
||||||
|
|
||||||
|
// Run FairValueArray per distribuzione
|
||||||
|
double[] fvalues = CalcFunctions.FairValueArray(
|
||||||
|
PricesUL,
|
||||||
|
corrMatrix,
|
||||||
|
numSottostanti,
|
||||||
|
num_sims,
|
||||||
|
TassoInteresse,
|
||||||
|
DaysToMaturity,
|
||||||
|
Dividends,
|
||||||
|
Volatility,
|
||||||
|
DaysToObs,
|
||||||
|
DaysToObsYFract,
|
||||||
|
CouponValues,
|
||||||
|
CouponTriggers,
|
||||||
|
AutocallValues,
|
||||||
|
AutocallTriggers,
|
||||||
|
MemoryFlags,
|
||||||
|
CouponInMemory,
|
||||||
|
PDI_Style,
|
||||||
|
PDI_Strike,
|
||||||
|
PDI_Barrier,
|
||||||
|
CapitalValue,
|
||||||
|
ProtMinVal,
|
||||||
|
AirBag,
|
||||||
|
Sigma,
|
||||||
|
TwinWin,
|
||||||
|
Relief,
|
||||||
|
FattoreAirbag,
|
||||||
|
OneStar,
|
||||||
|
TriggerOnestar,
|
||||||
|
CAP,
|
||||||
|
Leva).FairValueArray;
|
||||||
|
|
||||||
|
int[] fv = new int[fvalues.Length];
|
||||||
|
for (int i = 0; i < fvalues.Length; i++)
|
||||||
|
fv[i] = (int)Math.Floor(fvalues[i] * NominalAmount / 100);
|
||||||
|
|
||||||
|
|
||||||
|
var stopwatch = System.Diagnostics.Stopwatch.StartNew();
|
||||||
|
|
||||||
|
// Run GBM con Engine Payoff
|
||||||
|
FairValueComparison.CompareFairValues(
|
||||||
|
num_sims,
|
||||||
|
Enumerable.Range(0, num_sims)
|
||||||
|
.Select(_ => (double[])PricesUL.Clone())
|
||||||
|
.ToArray(),
|
||||||
|
corrMatrix,
|
||||||
|
numSottostanti,
|
||||||
|
DaysToMaturity,
|
||||||
|
TassoInteresse,
|
||||||
|
Dividends,
|
||||||
|
contextForCompare,
|
||||||
|
NominalAmount,
|
||||||
|
Isin,
|
||||||
|
Ask,
|
||||||
|
Bid,
|
||||||
|
LastDatePrice,
|
||||||
|
Category,
|
||||||
|
detailsEventModel.Select(r => r.ObsDate.Date).ToArray()
|
||||||
|
);
|
||||||
|
|
||||||
|
stopwatch.Stop();
|
||||||
|
Console.WriteLine($"\nTempo Elaborazione GBM Engine Payoff: {stopwatch.Elapsed.TotalSeconds:F2} sec");
|
||||||
|
Console.WriteLine("----------------------------------------");
|
||||||
|
|
||||||
|
// Verifica potenziale sottostima del fair value se ci sono ex-date future non ancora maturate
|
||||||
|
if (DaysToExDate.Length > DaysToObs.Length)
|
||||||
|
{
|
||||||
|
int lastObs = DaysToObs.Last();
|
||||||
|
int lastEx = DaysToExDate.Last();
|
||||||
|
|
||||||
|
if (lastObs < lastEx)
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = ConsoleColor.Yellow;
|
||||||
|
Console.WriteLine("ATTENZIONE: POSSIBILE SOTTOSTIMA DEL FAIR VALUE");
|
||||||
|
|
||||||
|
Console.WriteLine("\n Il calcolo del fair value presume che il coupon sia già stato pagato,");
|
||||||
|
Console.WriteLine(" ma in realtà non è ancora maturato (la Ex-Date non è ancora stata raggiunta).");
|
||||||
|
Console.WriteLine(" Il titolo incorpora ancora quel coupon nel suo prezzo, ma il pricer lo ha già scontato.");
|
||||||
|
|
||||||
|
Console.WriteLine("\n Inoltre, se erano presenti coupon in memoria, questi sono stati azzerati nel calcolo,");
|
||||||
|
Console.WriteLine(" come se il pagamento fosse già avvenuto.");
|
||||||
|
Console.WriteLine(" In realtà il diritto al pagamento non è ancora stato acquisito.");
|
||||||
|
Console.WriteLine(" Questo comporta una POSSIBILE SOTTOSTIMA SIGNIFICATIVA del FAIR VALUE.");
|
||||||
|
|
||||||
|
Console.WriteLine("\n SUGGERIMENTO: verificare manualmente l’ultimo evento osservato");
|
||||||
|
Console.WriteLine(" e valutare l’impatto potenziale sul fair value atteso.");
|
||||||
|
Console.ResetColor();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
RestartOrExit(args);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private static PricerApiResponse LoadApiData(string isin, int numPrezziEOD)
|
||||||
|
{
|
||||||
|
string url = $"https://smartapi.smart-roots.net/api/Pricer?isin={Uri.EscapeDataString(isin)}&numPrezziEOD={numPrezziEOD}";
|
||||||
|
using HttpClient httpClient = new HttpClient();
|
||||||
|
httpClient.Timeout = TimeSpan.FromSeconds(60);
|
||||||
|
string json = httpClient.GetStringAsync(url).GetAwaiter().GetResult();
|
||||||
|
var options = new JsonSerializerOptions
|
||||||
|
{
|
||||||
|
PropertyNameCaseInsensitive = true
|
||||||
|
};
|
||||||
|
|
||||||
|
PricerApiResponse? data = JsonSerializer.Deserialize<PricerApiResponse>(json, options);
|
||||||
|
if (data == null)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException("Risposta API non valida.");
|
||||||
|
}
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Dictionary<int, double[]> BuildPriceSeries(List<HistPriceULItem>? histPrice, int numPrezziEOD)
|
||||||
|
{
|
||||||
|
if (histPrice == null || histPrice.Count == 0)
|
||||||
|
{
|
||||||
|
return new Dictionary<int, double[]>();
|
||||||
|
}
|
||||||
|
|
||||||
|
var byUl = histPrice
|
||||||
|
.GroupBy(p => p.IDUnderlyings)
|
||||||
|
.ToDictionary(
|
||||||
|
g => g.Key,
|
||||||
|
g => g.OrderBy(p => p.rn).Select(p => p.Px_close).Take(numPrezziEOD).ToArray()
|
||||||
|
);
|
||||||
|
|
||||||
|
return byUl;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static double[,] BuildCorrelationMatrix(DetailsULItem[] detailsULModel, Dictionary<int, double[]> pricesById, int numPrezziEOD)
|
||||||
|
{
|
||||||
|
int numUL = detailsULModel.Length;
|
||||||
|
double[,] correlMatrix = new double[numUL, numUL];
|
||||||
|
|
||||||
|
int expected = numUL * numPrezziEOD;
|
||||||
|
int actual = pricesById.Values.Sum(p => p.Length);
|
||||||
|
if (expected > 0 && actual < expected)
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = ConsoleColor.Yellow;
|
||||||
|
Console.WriteLine($"Attenzione! Rilevati meno di {numPrezziEOD} prezzi eod in uno dei sottostanti");
|
||||||
|
Console.WriteLine($"Matrice di correlazione calcolata usando {actual / Math.Max(1, numUL)} prezzi eod");
|
||||||
|
Console.ResetColor();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < numUL; i++)
|
||||||
|
{
|
||||||
|
correlMatrix[i, i] = 1.0;
|
||||||
|
int idA = detailsULModel[i].IDUnderlyings;
|
||||||
|
double[] seriesA = pricesById.ContainsKey(idA) ? pricesById[idA] : Array.Empty<double>();
|
||||||
|
|
||||||
|
for (int j = i + 1; j < numUL; j++)
|
||||||
|
{
|
||||||
|
int idB = detailsULModel[j].IDUnderlyings;
|
||||||
|
double[] seriesB = pricesById.ContainsKey(idB) ? pricesById[idB] : Array.Empty<double>();
|
||||||
|
|
||||||
|
int len = Math.Min(seriesA.Length, seriesB.Length);
|
||||||
|
double corr = 0.0;
|
||||||
|
if (len >= 2)
|
||||||
|
{
|
||||||
|
corr = Correlation.Pearson(seriesA.Take(len), seriesB.Take(len));
|
||||||
|
}
|
||||||
|
correlMatrix[i, j] = corr;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int k = 0; k < numUL; k++)
|
||||||
|
{
|
||||||
|
if (correlMatrix[i, k] == 0) correlMatrix[i, k] = correlMatrix[k, i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return correlMatrix;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static double[] BuildVolatility(DetailsULItem[] detailsULModel, Dictionary<int, double[]> pricesById, int numPrezziEOD)
|
||||||
|
{
|
||||||
|
int numUL = detailsULModel.Length;
|
||||||
|
double[] volatilities = new double[numUL];
|
||||||
|
|
||||||
|
for (int i = 0; i < numUL; i++)
|
||||||
|
{
|
||||||
|
int id = detailsULModel[i].IDUnderlyings;
|
||||||
|
double[] prices = pricesById.ContainsKey(id) ? pricesById[id] : Array.Empty<double>();
|
||||||
|
volatilities[i] = ComputeAnnualizedVolatility(prices);
|
||||||
|
}
|
||||||
|
|
||||||
|
int expected = numUL * numPrezziEOD;
|
||||||
|
int actual = pricesById.Values.Sum(p => p.Length);
|
||||||
|
if (expected > 0 && actual < expected)
|
||||||
|
{
|
||||||
|
Console.ForegroundColor = ConsoleColor.Yellow;
|
||||||
|
Console.WriteLine($"Volatilita calcolata usando {actual / Math.Max(1, numUL)} prezzi eod");
|
||||||
|
Console.ResetColor();
|
||||||
|
}
|
||||||
|
|
||||||
|
return volatilities;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static double ComputeAnnualizedVolatility(double[] prices)
|
||||||
|
{
|
||||||
|
if (prices == null || prices.Length < 2)
|
||||||
|
{
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int n = prices.Length;
|
||||||
|
double[] logReturns = new double[n - 1];
|
||||||
|
for (int i = 0; i < n - 1; i++)
|
||||||
|
{
|
||||||
|
if (prices[i] > 0 && prices[i + 1] > 0)
|
||||||
|
{
|
||||||
|
logReturns[i] = Math.Log(prices[i] / prices[i + 1]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
logReturns[i] = 0.0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
double avg = logReturns.Average();
|
||||||
|
double sumSquared = logReturns.Select(r => Math.Pow(r - avg, 2)).Sum();
|
||||||
|
double variance = logReturns.Length > 1 ? sumSquared / (logReturns.Length - 1) : 0.0;
|
||||||
|
double stdDev = Math.Sqrt(variance);
|
||||||
|
return stdDev * Math.Sqrt(252);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static int CountBusinessDaysInclusive(DateTime startDate, DateTime endDate)
|
||||||
|
{
|
||||||
|
if (endDate < startDate)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
DateTime current = startDate;
|
||||||
|
while (current <= endDate)
|
||||||
|
{
|
||||||
|
if (current.DayOfWeek != DayOfWeek.Saturday && current.DayOfWeek != DayOfWeek.Sunday)
|
||||||
|
{
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
current = current.AddDays(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
private class PricerApiResponse
|
||||||
|
{
|
||||||
|
public string ISINCheck { get; set; }
|
||||||
|
public List<HistPriceULItem> HistPriceUL { get; set; }
|
||||||
|
public List<DetailsULItem> DetailsUL { get; set; }
|
||||||
|
public List<DetailsEventItem> DetailsEvent { get; set; }
|
||||||
|
public List<DetailsEventExDateItem> DetailsEventExDate { get; set; }
|
||||||
|
public List<DetailsCTFItem> DetailsCTF { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
private class HistPriceULItem
|
||||||
|
{
|
||||||
|
public int IDUnderlyings { get; set; }
|
||||||
|
public string Sottostante { get; set; }
|
||||||
|
public double Px_close { get; set; }
|
||||||
|
public DateTime Px_date { get; set; }
|
||||||
|
public int rn { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
private class DetailsULItem
|
||||||
|
{
|
||||||
|
public int IDUnderlyings { get; set; }
|
||||||
|
public string Sottostante { get; set; }
|
||||||
|
public double LastPrice { get; set; }
|
||||||
|
public double Strike { get; set; }
|
||||||
|
public double SpotPriceNormalized { get; set; }
|
||||||
|
public double Dividend { get; set; }
|
||||||
|
public double Volatility { get; set; }
|
||||||
|
public double TassoInteresse { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
private class DetailsEventItem
|
||||||
|
{
|
||||||
|
public DateTime ObsDate { get; set; }
|
||||||
|
public double CouponValue { get; set; }
|
||||||
|
public double CouponTrigger { get; set; }
|
||||||
|
public double AutocallValue { get; set; }
|
||||||
|
public double AutocallTrigger { get; set; }
|
||||||
|
public bool Memory { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
private class DetailsEventExDateItem
|
||||||
|
{
|
||||||
|
public DateTime ExDate { get; set; }
|
||||||
|
public double CouponValue { get; set; }
|
||||||
|
public double CouponTrigger { get; set; }
|
||||||
|
public double AutocallValue { get; set; }
|
||||||
|
public double AutocallTrigger { get; set; }
|
||||||
|
public bool Memory { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
private class DetailsCTFItem
|
||||||
|
{
|
||||||
|
public double TassoInteresse { get; set; }
|
||||||
|
public DateTime Maturity_Date { get; set; }
|
||||||
|
public string PDI_Style { get; set; }
|
||||||
|
public double PDI_Strike { get; set; }
|
||||||
|
public double PDI_Barrier { get; set; }
|
||||||
|
public double CapitalValue { get; set; }
|
||||||
|
public double NominalAmount { get; set; }
|
||||||
|
public double Bid { get; set; }
|
||||||
|
public double Ask { get; set; }
|
||||||
|
public DateTime LastDatePrice { get; set; }
|
||||||
|
public double CouponInMemory { get; set; }
|
||||||
|
public double ProtMinVal { get; set; }
|
||||||
|
public bool AirBag { get; set; }
|
||||||
|
public double FattoreAirbag { get; set; }
|
||||||
|
public bool OneStar { get; set; }
|
||||||
|
public double TriggerOnestar { get; set; }
|
||||||
|
public bool TwinWin { get; set; }
|
||||||
|
public bool Sigma { get; set; }
|
||||||
|
public bool Relief { get; set; }
|
||||||
|
public bool Domino { get; set; }
|
||||||
|
public string Category { get; set; }
|
||||||
|
public double? CAP { get; set; }
|
||||||
|
public double? Leva { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
private static string GetCasoString(int airbag, int sigma, int relief, int twinwin, int onestar)
|
||||||
|
{
|
||||||
|
List<string> componenti = new();
|
||||||
|
|
||||||
|
if (airbag == 1) componenti.Add("Airbag");
|
||||||
|
if (sigma == 1) componenti.Add("Sigma");
|
||||||
|
if (relief == 1) componenti.Add("Relief");
|
||||||
|
if (twinwin == 1) componenti.Add("TwinWin");
|
||||||
|
if (onestar == 1) componenti.Add("OneStar");
|
||||||
|
|
||||||
|
return componenti.Count > 0 ? string.Join(" + ", componenti) : "Standard";
|
||||||
|
}
|
||||||
|
private static void RestartOrExit(string[] args)
|
||||||
|
{
|
||||||
|
Console.WriteLine();
|
||||||
|
Console.WriteLine("Premere Invio per riavviare il programma o Q per uscire...");
|
||||||
|
string? input = Console.ReadLine();
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(input) &&
|
||||||
|
input.Equals("Q", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
Environment.Exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Console.IsOutputRedirected)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Console.Clear();
|
||||||
|
}
|
||||||
|
catch (IOException)
|
||||||
|
{
|
||||||
|
// Ignore if console buffer isn't available (e.g., redirected output).
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ManualRun(args);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
63
Pricer/Properties/Resources.Designer.cs
generated
Normal file
63
Pricer/Properties/Resources.Designer.cs
generated
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// Il codice è stato generato da uno strumento.
|
||||||
|
// Versione runtime:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Le modifiche apportate a questo file possono provocare un comportamento non corretto e andranno perse se
|
||||||
|
// il codice viene rigenerato.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace Pricer.Properties {
|
||||||
|
using System;
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Classe di risorse fortemente tipizzata per la ricerca di stringhe localizzate e così via.
|
||||||
|
/// </summary>
|
||||||
|
// Questa classe è stata generata automaticamente dalla classe StronglyTypedResourceBuilder.
|
||||||
|
// tramite uno strumento quale ResGen o Visual Studio.
|
||||||
|
// Per aggiungere o rimuovere un membro, modificare il file con estensione ResX ed eseguire nuovamente ResGen
|
||||||
|
// con l'opzione /str oppure ricompilare il progetto VS.
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
internal class Resources {
|
||||||
|
|
||||||
|
private static global::System.Resources.ResourceManager resourceMan;
|
||||||
|
|
||||||
|
private static global::System.Globalization.CultureInfo resourceCulture;
|
||||||
|
|
||||||
|
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
||||||
|
internal Resources() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Restituisce l'istanza di ResourceManager nella cache utilizzata da questa classe.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Resources.ResourceManager ResourceManager {
|
||||||
|
get {
|
||||||
|
if (object.ReferenceEquals(resourceMan, null)) {
|
||||||
|
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Pricer.Properties.Resources", typeof(Resources).Assembly);
|
||||||
|
resourceMan = temp;
|
||||||
|
}
|
||||||
|
return resourceMan;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Esegue l'override della proprietà CurrentUICulture del thread corrente per tutte le
|
||||||
|
/// ricerche di risorse eseguite utilizzando questa classe di risorse fortemente tipizzata.
|
||||||
|
/// </summary>
|
||||||
|
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
||||||
|
internal static global::System.Globalization.CultureInfo Culture {
|
||||||
|
get {
|
||||||
|
return resourceCulture;
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
resourceCulture = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
101
Pricer/Properties/Resources.resx
Normal file
101
Pricer/Properties/Resources.resx
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<root>
|
||||||
|
<!--
|
||||||
|
Microsoft ResX Schema
|
||||||
|
|
||||||
|
Version 1.3
|
||||||
|
|
||||||
|
The primary goals of this format is to allow a simple XML format
|
||||||
|
that is mostly human readable. The generation and parsing of the
|
||||||
|
various data types are done through the TypeConverter classes
|
||||||
|
associated with the data types.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
... ado.net/XML headers & schema ...
|
||||||
|
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
||||||
|
<resheader name="version">1.3</resheader>
|
||||||
|
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
||||||
|
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
||||||
|
<data name="Name1">this is my long string</data>
|
||||||
|
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
||||||
|
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
||||||
|
[base64 mime encoded serialized .NET Framework object]
|
||||||
|
</data>
|
||||||
|
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
|
[base64 mime encoded string representing a byte array form of the .NET Framework object]
|
||||||
|
</data>
|
||||||
|
|
||||||
|
There are any number of "resheader" rows that contain simple
|
||||||
|
name/value pairs.
|
||||||
|
|
||||||
|
Each data row contains a name, and value. The row also contains a
|
||||||
|
type or mimetype. Type corresponds to a .NET class that support
|
||||||
|
text/value conversion through the TypeConverter architecture.
|
||||||
|
Classes that don't support this are serialized and stored with the
|
||||||
|
mimetype set.
|
||||||
|
|
||||||
|
The mimetype is used for serialized objects, and tells the
|
||||||
|
ResXResourceReader how to depersist the object. This is currently not
|
||||||
|
extensible. For a given mimetype the value must be set accordingly:
|
||||||
|
|
||||||
|
Note - application/x-microsoft.net.object.binary.base64 is the format
|
||||||
|
that the ResXResourceWriter will generate, however the reader can
|
||||||
|
read any of the formats listed below.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.binary.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Serialization.Formatters.Binary.BinaryFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.soap.base64
|
||||||
|
value : The object must be serialized with
|
||||||
|
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
|
||||||
|
mimetype: application/x-microsoft.net.object.bytearray.base64
|
||||||
|
value : The object must be serialized into a byte array
|
||||||
|
: using a System.ComponentModel.TypeConverter
|
||||||
|
: and then encoded with base64 encoding.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xsd:element name="root" msdata:IsDataSet="true">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:choice maxOccurs="unbounded">
|
||||||
|
<xsd:element name="data">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
|
||||||
|
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
||||||
|
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
<xsd:element name="resheader">
|
||||||
|
<xsd:complexType>
|
||||||
|
<xsd:sequence>
|
||||||
|
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
||||||
|
</xsd:sequence>
|
||||||
|
<xsd:attribute name="name" type="xsd:string" use="required" />
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:choice>
|
||||||
|
</xsd:complexType>
|
||||||
|
</xsd:element>
|
||||||
|
</xsd:schema>
|
||||||
|
<resheader name="resmimetype">
|
||||||
|
<value>text/microsoft-resx</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="version">
|
||||||
|
<value>1.3</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="reader">
|
||||||
|
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
<resheader name="writer">
|
||||||
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</resheader>
|
||||||
|
</root>
|
||||||
26
Pricer/Properties/Settings.Designer.cs
generated
Normal file
26
Pricer/Properties/Settings.Designer.cs
generated
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
//------------------------------------------------------------------------------
|
||||||
|
// <auto-generated>
|
||||||
|
// Il codice è stato generato da uno strumento.
|
||||||
|
// Versione runtime:4.0.30319.42000
|
||||||
|
//
|
||||||
|
// Le modifiche apportate a questo file possono provocare un comportamento non corretto e andranno perse se
|
||||||
|
// il codice viene rigenerato.
|
||||||
|
// </auto-generated>
|
||||||
|
//------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
namespace Pricer.Properties {
|
||||||
|
|
||||||
|
|
||||||
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.14.0.0")]
|
||||||
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||||
|
|
||||||
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
|
|
||||||
|
public static Settings Default {
|
||||||
|
get {
|
||||||
|
return defaultInstance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
6
Pricer/Properties/Settings.settings
Normal file
6
Pricer/Properties/Settings.settings
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
|
||||||
|
<Profiles>
|
||||||
|
<Profile Name="(Default)" />
|
||||||
|
</Profiles>
|
||||||
|
</SettingsFile>
|
||||||
14
Pricer/appsettings.json
Normal file
14
Pricer/appsettings.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"ConnectionStrings": {
|
||||||
|
"FirstSolutionDB": "Data Source=26.69.45.60;Initial Catalog=FirstSolutionDB;Persist Security Info=True;User ID=sa;Password=Skyline72"
|
||||||
|
},
|
||||||
|
"exclude": [
|
||||||
|
"**/bin",
|
||||||
|
"**/bower_components",
|
||||||
|
"**/jspm_packages",
|
||||||
|
"**/node_modules",
|
||||||
|
"**/obj",
|
||||||
|
"**/platforms"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
BIN
Pricer/bin/Debug/net6.0-windows7.0/Accord.Math.Core.dll
Normal file
BIN
Pricer/bin/Debug/net6.0-windows7.0/Accord.Math.Core.dll
Normal file
Binary file not shown.
BIN
Pricer/bin/Debug/net6.0-windows7.0/Accord.Math.dll
Normal file
BIN
Pricer/bin/Debug/net6.0-windows7.0/Accord.Math.dll
Normal file
Binary file not shown.
BIN
Pricer/bin/Debug/net6.0-windows7.0/Accord.Statistics.dll
Normal file
BIN
Pricer/bin/Debug/net6.0-windows7.0/Accord.Statistics.dll
Normal file
Binary file not shown.
BIN
Pricer/bin/Debug/net6.0-windows7.0/Accord.dll
Normal file
BIN
Pricer/bin/Debug/net6.0-windows7.0/Accord.dll
Normal file
Binary file not shown.
7
Pricer/bin/Debug/net6.0-windows7.0/Accord.dll.config
Normal file
7
Pricer/bin/Debug/net6.0-windows7.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>
|
||||||
BIN
Pricer/bin/Debug/net6.0-windows7.0/Apache.Arrow.dll
Normal file
BIN
Pricer/bin/Debug/net6.0-windows7.0/Apache.Arrow.dll
Normal file
Binary file not shown.
BIN
Pricer/bin/Debug/net6.0-windows7.0/ConsoleTableExt.dll
Normal file
BIN
Pricer/bin/Debug/net6.0-windows7.0/ConsoleTableExt.dll
Normal file
Binary file not shown.
BIN
Pricer/bin/Debug/net6.0-windows7.0/Dapper.dll
Normal file
BIN
Pricer/bin/Debug/net6.0-windows7.0/Dapper.dll
Normal file
Binary file not shown.
BIN
Pricer/bin/Debug/net6.0-windows7.0/LibraryPricer.dll
Normal file
BIN
Pricer/bin/Debug/net6.0-windows7.0/LibraryPricer.dll
Normal file
Binary file not shown.
BIN
Pricer/bin/Debug/net6.0-windows7.0/LibraryPricer.pdb
Normal file
BIN
Pricer/bin/Debug/net6.0-windows7.0/LibraryPricer.pdb
Normal file
Binary file not shown.
BIN
Pricer/bin/Debug/net6.0-windows7.0/MathNet.Numerics.dll
Normal file
BIN
Pricer/bin/Debug/net6.0-windows7.0/MathNet.Numerics.dll
Normal file
Binary file not shown.
BIN
Pricer/bin/Debug/net6.0-windows7.0/Microsoft.Data.Analysis.dll
Normal file
BIN
Pricer/bin/Debug/net6.0-windows7.0/Microsoft.Data.Analysis.dll
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Pricer/bin/Debug/net6.0-windows7.0/Microsoft.ML.DataView.dll
Normal file
BIN
Pricer/bin/Debug/net6.0-windows7.0/Microsoft.ML.DataView.dll
Normal file
Binary file not shown.
Binary file not shown.
659
Pricer/bin/Debug/net6.0-windows7.0/Pricer.deps.json
Normal file
659
Pricer/bin/Debug/net6.0-windows7.0/Pricer.deps.json
Normal file
@@ -0,0 +1,659 @@
|
|||||||
|
{
|
||||||
|
"runtimeTarget": {
|
||||||
|
"name": ".NETCoreApp,Version=v6.0",
|
||||||
|
"signature": ""
|
||||||
|
},
|
||||||
|
"compilationOptions": {},
|
||||||
|
"targets": {
|
||||||
|
".NETCoreApp,Version=v6.0": {
|
||||||
|
"Pricer/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"ConsoleTableExt": "3.3.0",
|
||||||
|
"LibraryPricer": "1.0.0",
|
||||||
|
"MathNet.Numerics": "5.0.0",
|
||||||
|
"Microsoft.Data.Analysis": "0.20.1",
|
||||||
|
"System.Data.SqlClient": "4.8.6"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"Pricer.dll": {}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Accord/3.8.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Accord.dll": {
|
||||||
|
"assemblyVersion": "3.8.0.0",
|
||||||
|
"fileVersion": "3.8.0.6134"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Accord.Math/3.8.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Accord": "3.8.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Accord.Math.Core.dll": {
|
||||||
|
"assemblyVersion": "3.8.0.0",
|
||||||
|
"fileVersion": "3.8.0.6134"
|
||||||
|
},
|
||||||
|
"lib/netstandard2.0/Accord.Math.dll": {
|
||||||
|
"assemblyVersion": "3.8.0.0",
|
||||||
|
"fileVersion": "3.8.0.6134"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Accord.Statistics/3.8.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Accord": "3.8.0",
|
||||||
|
"Accord.Math": "3.8.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Accord.Statistics.dll": {
|
||||||
|
"assemblyVersion": "3.8.0.0",
|
||||||
|
"fileVersion": "3.8.0.6134"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Apache.Arrow/2.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Buffers": "4.5.1",
|
||||||
|
"System.Memory": "4.5.3",
|
||||||
|
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
|
||||||
|
"System.Threading.Tasks.Extensions": "4.5.2"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp2.1/Apache.Arrow.dll": {
|
||||||
|
"assemblyVersion": "2.0.0.0",
|
||||||
|
"fileVersion": "2.0.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"ConsoleTableExt/3.3.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/ConsoleTableExt.dll": {
|
||||||
|
"assemblyVersion": "3.1.9.0",
|
||||||
|
"fileVersion": "3.1.9.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Dapper/2.0.143": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net5.0/Dapper.dll": {
|
||||||
|
"assemblyVersion": "2.0.0.0",
|
||||||
|
"fileVersion": "2.0.143.55328"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"MathNet.Numerics/5.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/MathNet.Numerics.dll": {
|
||||||
|
"assemblyVersion": "5.0.0.0",
|
||||||
|
"fileVersion": "5.0.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Data.Analysis/0.20.1": {
|
||||||
|
"dependencies": {
|
||||||
|
"Apache.Arrow": "2.0.0",
|
||||||
|
"Microsoft.ML.DataView": "2.0.1",
|
||||||
|
"System.Buffers": "4.5.1",
|
||||||
|
"System.Memory": "4.5.3",
|
||||||
|
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Microsoft.Data.Analysis.dll": {
|
||||||
|
"assemblyVersion": "1.0.0.0",
|
||||||
|
"fileVersion": "0.2000.123.8101"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration/7.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
|
||||||
|
"Microsoft.Extensions.Primitives": "7.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Microsoft.Extensions.Configuration.dll": {
|
||||||
|
"assemblyVersion": "7.0.0.0",
|
||||||
|
"fileVersion": "7.0.22.51805"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration.Abstractions/7.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.Primitives": "7.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Microsoft.Extensions.Configuration.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "7.0.0.0",
|
||||||
|
"fileVersion": "7.0.22.51805"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration.FileExtensions/7.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.Configuration": "7.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
|
||||||
|
"Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
|
||||||
|
"Microsoft.Extensions.FileProviders.Physical": "7.0.0",
|
||||||
|
"Microsoft.Extensions.Primitives": "7.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Microsoft.Extensions.Configuration.FileExtensions.dll": {
|
||||||
|
"assemblyVersion": "7.0.0.0",
|
||||||
|
"fileVersion": "7.0.22.51805"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration.Json/7.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.Configuration": "7.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.Abstractions": "7.0.0",
|
||||||
|
"Microsoft.Extensions.Configuration.FileExtensions": "7.0.0",
|
||||||
|
"Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
|
||||||
|
"System.Text.Json": "7.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Microsoft.Extensions.Configuration.Json.dll": {
|
||||||
|
"assemblyVersion": "7.0.0.0",
|
||||||
|
"fileVersion": "7.0.22.51805"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.FileProviders.Abstractions/7.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.Primitives": "7.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Microsoft.Extensions.FileProviders.Abstractions.dll": {
|
||||||
|
"assemblyVersion": "7.0.0.0",
|
||||||
|
"fileVersion": "7.0.22.51805"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.FileProviders.Physical/7.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Extensions.FileProviders.Abstractions": "7.0.0",
|
||||||
|
"Microsoft.Extensions.FileSystemGlobbing": "7.0.0",
|
||||||
|
"Microsoft.Extensions.Primitives": "7.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Microsoft.Extensions.FileProviders.Physical.dll": {
|
||||||
|
"assemblyVersion": "7.0.0.0",
|
||||||
|
"fileVersion": "7.0.22.51805"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.FileSystemGlobbing/7.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Microsoft.Extensions.FileSystemGlobbing.dll": {
|
||||||
|
"assemblyVersion": "7.0.0.0",
|
||||||
|
"fileVersion": "7.0.22.51805"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Primitives/7.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Microsoft.Extensions.Primitives.dll": {
|
||||||
|
"assemblyVersion": "7.0.0.0",
|
||||||
|
"fileVersion": "7.0.22.51805"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.ML.DataView/2.0.1": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Collections.Immutable": "1.5.0",
|
||||||
|
"System.Memory": "4.5.3"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netstandard2.0/Microsoft.ML.DataView.dll": {
|
||||||
|
"assemblyVersion": "1.0.0.0",
|
||||||
|
"fileVersion": "2.0.123.8101"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.NETCore.Platforms/3.1.0": {},
|
||||||
|
"Microsoft.Win32.Registry/4.7.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Security.AccessControl": "4.7.0",
|
||||||
|
"System.Security.Principal.Windows": "4.7.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"Microsoft.Win32.SystemEvents/7.0.0": {
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/Microsoft.Win32.SystemEvents.dll": {
|
||||||
|
"assemblyVersion": "7.0.0.0",
|
||||||
|
"fileVersion": "7.0.22.51805"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtimeTargets": {
|
||||||
|
"runtimes/win/lib/net6.0/Microsoft.Win32.SystemEvents.dll": {
|
||||||
|
"rid": "win",
|
||||||
|
"assetType": "runtime",
|
||||||
|
"assemblyVersion": "7.0.0.0",
|
||||||
|
"fileVersion": "7.0.22.51805"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtime.native.System.Data.SqlClient.sni/4.7.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni": "4.4.0",
|
||||||
|
"runtime.win-x64.runtime.native.System.Data.SqlClient.sni": "4.4.0",
|
||||||
|
"runtime.win-x86.runtime.native.System.Data.SqlClient.sni": "4.4.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
|
||||||
|
"runtimeTargets": {
|
||||||
|
"runtimes/win-arm64/native/sni.dll": {
|
||||||
|
"rid": "win-arm64",
|
||||||
|
"assetType": "native",
|
||||||
|
"fileVersion": "4.6.25512.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
|
||||||
|
"runtimeTargets": {
|
||||||
|
"runtimes/win-x64/native/sni.dll": {
|
||||||
|
"rid": "win-x64",
|
||||||
|
"assetType": "native",
|
||||||
|
"fileVersion": "4.6.25512.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0": {
|
||||||
|
"runtimeTargets": {
|
||||||
|
"runtimes/win-x86/native/sni.dll": {
|
||||||
|
"rid": "win-x86",
|
||||||
|
"assetType": "native",
|
||||||
|
"fileVersion": "4.6.25512.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"SqlServerBulkTools.Core/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Data.SqlClient": "4.8.6"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp2.1/SqlBulkTools.Core.dll": {
|
||||||
|
"assemblyVersion": "1.0.0.0",
|
||||||
|
"fileVersion": "1.0.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Buffers/4.5.1": {},
|
||||||
|
"System.Collections.Immutable/1.5.0": {},
|
||||||
|
"System.Data.SqlClient/4.8.6": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Win32.Registry": "4.7.0",
|
||||||
|
"System.Security.Principal.Windows": "4.7.0",
|
||||||
|
"runtime.native.System.Data.SqlClient.sni": "4.7.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/netcoreapp2.1/System.Data.SqlClient.dll": {
|
||||||
|
"assemblyVersion": "4.6.1.6",
|
||||||
|
"fileVersion": "4.700.23.52603"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtimeTargets": {
|
||||||
|
"runtimes/unix/lib/netcoreapp2.1/System.Data.SqlClient.dll": {
|
||||||
|
"rid": "unix",
|
||||||
|
"assetType": "runtime",
|
||||||
|
"assemblyVersion": "4.6.1.6",
|
||||||
|
"fileVersion": "4.700.23.52603"
|
||||||
|
},
|
||||||
|
"runtimes/win/lib/netcoreapp2.1/System.Data.SqlClient.dll": {
|
||||||
|
"rid": "win",
|
||||||
|
"assetType": "runtime",
|
||||||
|
"assemblyVersion": "4.6.1.6",
|
||||||
|
"fileVersion": "4.700.23.52603"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Drawing.Common/7.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.Win32.SystemEvents": "7.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/System.Drawing.Common.dll": {
|
||||||
|
"assemblyVersion": "7.0.0.0",
|
||||||
|
"fileVersion": "7.0.22.51805"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtimeTargets": {
|
||||||
|
"runtimes/win/lib/net6.0/System.Drawing.Common.dll": {
|
||||||
|
"rid": "win",
|
||||||
|
"assetType": "runtime",
|
||||||
|
"assemblyVersion": "7.0.0.0",
|
||||||
|
"fileVersion": "7.0.22.51805"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Memory/4.5.3": {},
|
||||||
|
"System.Runtime.CompilerServices.Unsafe/6.0.0": {},
|
||||||
|
"System.Security.AccessControl/4.7.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Microsoft.NETCore.Platforms": "3.1.0",
|
||||||
|
"System.Security.Principal.Windows": "4.7.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Security.Principal.Windows/4.7.0": {},
|
||||||
|
"System.Text.Encodings.Web/7.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/System.Text.Encodings.Web.dll": {
|
||||||
|
"assemblyVersion": "7.0.0.0",
|
||||||
|
"fileVersion": "7.0.22.51805"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"runtimeTargets": {
|
||||||
|
"runtimes/browser/lib/net6.0/System.Text.Encodings.Web.dll": {
|
||||||
|
"rid": "browser",
|
||||||
|
"assetType": "runtime",
|
||||||
|
"assemblyVersion": "7.0.0.0",
|
||||||
|
"fileVersion": "7.0.22.51805"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Text.Json/7.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"System.Runtime.CompilerServices.Unsafe": "6.0.0",
|
||||||
|
"System.Text.Encodings.Web": "7.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"lib/net6.0/System.Text.Json.dll": {
|
||||||
|
"assemblyVersion": "7.0.0.0",
|
||||||
|
"fileVersion": "7.0.22.51805"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"System.Threading.Tasks.Extensions/4.5.2": {},
|
||||||
|
"LibraryPricer/1.0.0": {
|
||||||
|
"dependencies": {
|
||||||
|
"Accord.Statistics": "3.8.0",
|
||||||
|
"ConsoleTableExt": "3.3.0",
|
||||||
|
"Dapper": "2.0.143",
|
||||||
|
"MathNet.Numerics": "5.0.0",
|
||||||
|
"Microsoft.Data.Analysis": "0.20.1",
|
||||||
|
"Microsoft.Extensions.Configuration.Json": "7.0.0",
|
||||||
|
"SqlServerBulkTools.Core": "1.0.0",
|
||||||
|
"System.Data.SqlClient": "4.8.6",
|
||||||
|
"System.Drawing.Common": "7.0.0"
|
||||||
|
},
|
||||||
|
"runtime": {
|
||||||
|
"LibraryPricer.dll": {
|
||||||
|
"assemblyVersion": "1.0.0.0",
|
||||||
|
"fileVersion": "1.0.0.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"libraries": {
|
||||||
|
"Pricer/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
},
|
||||||
|
"Accord/3.8.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-7kJrB570dO5ELim+2KWQNozuvWO9/BuZfZspdFy36fcWPNF2CEccblLuILeUlI8QJYd2DlBy0bfK8BlCx/uayA==",
|
||||||
|
"path": "accord/3.8.0",
|
||||||
|
"hashPath": "accord.3.8.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Accord.Math/3.8.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-K3dzeQjDIrwRnoTRoMOoIbul2Uc0B8cnEtdrSlirmIo37C+jVkmYpJzme/z4Kg99XR2Vj5W5TTNlhjn+AKR+8A==",
|
||||||
|
"path": "accord.math/3.8.0",
|
||||||
|
"hashPath": "accord.math.3.8.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Accord.Statistics/3.8.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-8WsmCE31Qdy3FmRvwtAY3F9/fJEi/6uyLQrhOvSI6pP6gpoaacmCrJRIphkGf2EB8gKHRWLAc4UXr1OOPHxkmQ==",
|
||||||
|
"path": "accord.statistics/3.8.0",
|
||||||
|
"hashPath": "accord.statistics.3.8.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Apache.Arrow/2.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-VR+F7g41WMJhr7WoZwwp05OrbYgM5Kmj3FwFXv1g0GgAYhEoCJz3L3qpllUWq9+X/rFKkFRZ2B8XcmsbaqGhrw==",
|
||||||
|
"path": "apache.arrow/2.0.0",
|
||||||
|
"hashPath": "apache.arrow.2.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"ConsoleTableExt/3.3.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-kQ1P7mgDQbvEDXGt1sheOQbu37TidLnOv7RjcSCqW8m/weFtu4adMkN75YQHp4mSqquokGdBJOAKGiegLx2Nhg==",
|
||||||
|
"path": "consoletableext/3.3.0",
|
||||||
|
"hashPath": "consoletableext.3.3.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Dapper/2.0.143": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-Vh0U+Fins3IpS7APUlrzga3+1mswWngB5fZ0xj4w+FQR5JhJzA5uHV5rSepkahvmshNZUA0YcHtae9vFQpiVTw==",
|
||||||
|
"path": "dapper/2.0.143",
|
||||||
|
"hashPath": "dapper.2.0.143.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"MathNet.Numerics/5.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-pg1W2VwaEQMAiTpGK840hZgzavnqjlCMTVSbtVCXVyT+7AX4mc1o89SPv4TBlAjhgCOo9c1Y+jZ5m3ti2YgGgA==",
|
||||||
|
"path": "mathnet.numerics/5.0.0",
|
||||||
|
"hashPath": "mathnet.numerics.5.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Data.Analysis/0.20.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-Or8x/g9oM+ti2bGqUmgip9Wxwr5/bQyNP9sQpke92i/3Bi+syq31kwJ4z8Dk93FECYT8IDETfcyT21J+F4rcdw==",
|
||||||
|
"path": "microsoft.data.analysis/0.20.1",
|
||||||
|
"hashPath": "microsoft.data.analysis.0.20.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration/7.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-tldQUBWt/xeH2K7/hMPPo5g8zuLc3Ro9I5d4o/XrxvxOCA2EZBtW7bCHHTc49fcBtvB8tLAb/Qsmfrq+2SJ4vA==",
|
||||||
|
"path": "microsoft.extensions.configuration/7.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.configuration.7.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration.Abstractions/7.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-f34u2eaqIjNO9YLHBz8rozVZ+TcFiFs0F3r7nUJd7FRkVSxk8u4OpoK226mi49MwexHOR2ibP9MFvRUaLilcQQ==",
|
||||||
|
"path": "microsoft.extensions.configuration.abstractions/7.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.configuration.abstractions.7.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration.FileExtensions/7.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-xk2lRJ1RDuqe57BmgvRPyCt6zyePKUmvT6iuXqiHR+/OIIgWVR8Ff5k2p6DwmqY8a17hx/OnrekEhziEIeQP6Q==",
|
||||||
|
"path": "microsoft.extensions.configuration.fileextensions/7.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.configuration.fileextensions.7.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Configuration.Json/7.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-LDNYe3uw76W35Jci+be4LDf2lkQZe0A7EEYQVChFbc509CpZ4Iupod8li4PUXPBhEUOFI/rlQNf5xkzJRQGvtA==",
|
||||||
|
"path": "microsoft.extensions.configuration.json/7.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.configuration.json.7.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.FileProviders.Abstractions/7.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-NyawiW9ZT/liQb34k9YqBSNPLuuPkrjMgQZ24Y/xXX1RoiBkLUdPMaQTmxhZ5TYu8ZKZ9qayzil75JX95vGQUg==",
|
||||||
|
"path": "microsoft.extensions.fileproviders.abstractions/7.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.fileproviders.abstractions.7.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.FileProviders.Physical/7.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-K8D2MTR+EtzkbZ8z80LrG7Ur64R7ZZdRLt1J5cgpc/pUWl0C6IkAUapPuK28oionHueCPELUqq0oYEvZfalNdg==",
|
||||||
|
"path": "microsoft.extensions.fileproviders.physical/7.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.fileproviders.physical.7.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.FileSystemGlobbing/7.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-2jONjKHiF+E92ynz2ZFcr9OvxIw+rTGMPEH+UZGeHTEComVav93jQUWGkso8yWwVBcEJGcNcZAaqY01FFJcj7w==",
|
||||||
|
"path": "microsoft.extensions.filesystemglobbing/7.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.filesystemglobbing.7.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Extensions.Primitives/7.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==",
|
||||||
|
"path": "microsoft.extensions.primitives/7.0.0",
|
||||||
|
"hashPath": "microsoft.extensions.primitives.7.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.ML.DataView/2.0.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-w+GkAXlxaut65Lm+Fbp34YTfp0/9jGRn9uiVlL7Lls0/v+4IJM7SMTHfhvegPU48cyI6K2kzaK9j2Va/labhTA==",
|
||||||
|
"path": "microsoft.ml.dataview/2.0.1",
|
||||||
|
"hashPath": "microsoft.ml.dataview.2.0.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.NETCore.Platforms/3.1.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-z7aeg8oHln2CuNulfhiLYxCVMPEwBl3rzicjvIX+4sUuCwvXw5oXQEtbiU2c0z4qYL5L3Kmx0mMA/+t/SbY67w==",
|
||||||
|
"path": "microsoft.netcore.platforms/3.1.0",
|
||||||
|
"hashPath": "microsoft.netcore.platforms.3.1.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Win32.Registry/4.7.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-KSrRMb5vNi0CWSGG1++id2ZOs/1QhRqROt+qgbEAdQuGjGrFcl4AOl4/exGPUYz2wUnU42nvJqon1T3U0kPXLA==",
|
||||||
|
"path": "microsoft.win32.registry/4.7.0",
|
||||||
|
"hashPath": "microsoft.win32.registry.4.7.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"Microsoft.Win32.SystemEvents/7.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-2nXPrhdAyAzir0gLl8Yy8S5Mnm/uBSQQA7jEsILOS1MTyS7DbmV1NgViMtvV1sfCD1ebITpNwb1NIinKeJgUVQ==",
|
||||||
|
"path": "microsoft.win32.systemevents/7.0.0",
|
||||||
|
"hashPath": "microsoft.win32.systemevents.7.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"runtime.native.System.Data.SqlClient.sni/4.7.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-9kyFSIdN3T0qjDQ2R0HRXYIhS3l5psBzQi6qqhdLz+SzFyEy4sVxNOke+yyYv8Cu8rPER12c3RDjLT8wF3WBYQ==",
|
||||||
|
"path": "runtime.native.system.data.sqlclient.sni/4.7.0",
|
||||||
|
"hashPath": "runtime.native.system.data.sqlclient.sni.4.7.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"runtime.win-arm64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-LbrynESTp3bm5O/+jGL8v0Qg5SJlTV08lpIpFesXjF6uGNMWqFnUQbYBJwZTeua6E/Y7FIM1C54Ey1btLWupdg==",
|
||||||
|
"path": "runtime.win-arm64.runtime.native.system.data.sqlclient.sni/4.4.0",
|
||||||
|
"hashPath": "runtime.win-arm64.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"runtime.win-x64.runtime.native.System.Data.SqlClient.sni/4.4.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-38ugOfkYJqJoX9g6EYRlZB5U2ZJH51UP8ptxZgdpS07FgOEToV+lS11ouNK2PM12Pr6X/PpT5jK82G3DwH/SxQ==",
|
||||||
|
"path": "runtime.win-x64.runtime.native.system.data.sqlclient.sni/4.4.0",
|
||||||
|
"hashPath": "runtime.win-x64.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"runtime.win-x86.runtime.native.System.Data.SqlClient.sni/4.4.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-YhEdSQUsTx+C8m8Bw7ar5/VesXvCFMItyZF7G1AUY+OM0VPZUOeAVpJ4Wl6fydBGUYZxojTDR3I6Bj/+BPkJNA==",
|
||||||
|
"path": "runtime.win-x86.runtime.native.system.data.sqlclient.sni/4.4.0",
|
||||||
|
"hashPath": "runtime.win-x86.runtime.native.system.data.sqlclient.sni.4.4.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"SqlServerBulkTools.Core/1.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ZSe6s6YDxOaYEkuMYJDiZ1vLMDX70sZ5Y0vZ1qGGaDtvendiYXLX0n+f5OjdC2iMae/b8gRLkLe1lzHqYvivOA==",
|
||||||
|
"path": "sqlserverbulktools.core/1.0.0",
|
||||||
|
"hashPath": "sqlserverbulktools.core.1.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Buffers/4.5.1": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==",
|
||||||
|
"path": "system.buffers/4.5.1",
|
||||||
|
"hashPath": "system.buffers.4.5.1.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Collections.Immutable/1.5.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-EXKiDFsChZW0RjrZ4FYHu9aW6+P4MCgEDCklsVseRfhoO0F+dXeMSsMRAlVXIo06kGJ/zv+2w1a2uc2+kxxSaQ==",
|
||||||
|
"path": "system.collections.immutable/1.5.0",
|
||||||
|
"hashPath": "system.collections.immutable.1.5.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Data.SqlClient/4.8.6": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-2Ij/LCaTQRyAi5lAv7UUTV9R2FobC8xN9mE0fXBZohum/xLl8IZVmE98Rq5ugQHjCgTBRKqpXRb4ORulRdA6Ig==",
|
||||||
|
"path": "system.data.sqlclient/4.8.6",
|
||||||
|
"hashPath": "system.data.sqlclient.4.8.6.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Drawing.Common/7.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-KIX+oBU38pxkKPxvLcLfIkOV5Ien8ReN78wro7OF5/erwcmortzeFx+iBswlh2Vz6gVne0khocQudGwaO1Ey6A==",
|
||||||
|
"path": "system.drawing.common/7.0.0",
|
||||||
|
"hashPath": "system.drawing.common.7.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Memory/4.5.3": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-3oDzvc/zzetpTKWMShs1AADwZjQ/36HnsufHRPcOjyRAAMLDlu2iD33MBI2opxnezcVUtXyqDXXjoFMOU9c7SA==",
|
||||||
|
"path": "system.memory/4.5.3",
|
||||||
|
"hashPath": "system.memory.4.5.3.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Runtime.CompilerServices.Unsafe/6.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==",
|
||||||
|
"path": "system.runtime.compilerservices.unsafe/6.0.0",
|
||||||
|
"hashPath": "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Security.AccessControl/4.7.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-JECvTt5aFF3WT3gHpfofL2MNNP6v84sxtXxpqhLBCcDRzqsPBmHhQ6shv4DwwN2tRlzsUxtb3G9M3763rbXKDg==",
|
||||||
|
"path": "system.security.accesscontrol/4.7.0",
|
||||||
|
"hashPath": "system.security.accesscontrol.4.7.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Security.Principal.Windows/4.7.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-ojD0PX0XhneCsUbAZVKdb7h/70vyYMDYs85lwEI+LngEONe/17A0cFaRFqZU+sOEidcVswYWikYOQ9PPfjlbtQ==",
|
||||||
|
"path": "system.security.principal.windows/4.7.0",
|
||||||
|
"hashPath": "system.security.principal.windows.4.7.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Text.Encodings.Web/7.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==",
|
||||||
|
"path": "system.text.encodings.web/7.0.0",
|
||||||
|
"hashPath": "system.text.encodings.web.7.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Text.Json/7.0.0": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==",
|
||||||
|
"path": "system.text.json/7.0.0",
|
||||||
|
"hashPath": "system.text.json.7.0.0.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"System.Threading.Tasks.Extensions/4.5.2": {
|
||||||
|
"type": "package",
|
||||||
|
"serviceable": true,
|
||||||
|
"sha512": "sha512-BG/TNxDFv0svAzx8OiMXDlsHfGw623BZ8tCXw4YLhDFDvDhNUEV58jKYMGRnkbJNm7c3JNNJDiN7JBMzxRBR2w==",
|
||||||
|
"path": "system.threading.tasks.extensions/4.5.2",
|
||||||
|
"hashPath": "system.threading.tasks.extensions.4.5.2.nupkg.sha512"
|
||||||
|
},
|
||||||
|
"LibraryPricer/1.0.0": {
|
||||||
|
"type": "project",
|
||||||
|
"serviceable": false,
|
||||||
|
"sha512": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
Pricer/bin/Debug/net6.0-windows7.0/Pricer.dll
Normal file
BIN
Pricer/bin/Debug/net6.0-windows7.0/Pricer.dll
Normal file
Binary file not shown.
BIN
Pricer/bin/Debug/net6.0-windows7.0/Pricer.exe
Normal file
BIN
Pricer/bin/Debug/net6.0-windows7.0/Pricer.exe
Normal file
Binary file not shown.
BIN
Pricer/bin/Debug/net6.0-windows7.0/Pricer.pdb
Normal file
BIN
Pricer/bin/Debug/net6.0-windows7.0/Pricer.pdb
Normal file
Binary file not shown.
15
Pricer/bin/Debug/net6.0-windows7.0/Pricer.runtimeconfig.json
Normal file
15
Pricer/bin/Debug/net6.0-windows7.0/Pricer.runtimeconfig.json
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"runtimeOptions": {
|
||||||
|
"tfm": "net6.0",
|
||||||
|
"frameworks": [
|
||||||
|
{
|
||||||
|
"name": "Microsoft.NETCore.App",
|
||||||
|
"version": "6.0.0"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Microsoft.WindowsDesktop.App",
|
||||||
|
"version": "6.0.0"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
BIN
Pricer/bin/Debug/net6.0-windows7.0/SqlBulkTools.Core.dll
Normal file
BIN
Pricer/bin/Debug/net6.0-windows7.0/SqlBulkTools.Core.dll
Normal file
Binary file not shown.
BIN
Pricer/bin/Debug/net6.0-windows7.0/System.Data.SqlClient.dll
Normal file
BIN
Pricer/bin/Debug/net6.0-windows7.0/System.Data.SqlClient.dll
Normal file
Binary file not shown.
BIN
Pricer/bin/Debug/net6.0-windows7.0/System.Drawing.Common.dll
Normal file
BIN
Pricer/bin/Debug/net6.0-windows7.0/System.Drawing.Common.dll
Normal file
Binary file not shown.
BIN
Pricer/bin/Debug/net6.0-windows7.0/System.Text.Encodings.Web.dll
Normal file
BIN
Pricer/bin/Debug/net6.0-windows7.0/System.Text.Encodings.Web.dll
Normal file
Binary file not shown.
BIN
Pricer/bin/Debug/net6.0-windows7.0/System.Text.Json.dll
Normal file
BIN
Pricer/bin/Debug/net6.0-windows7.0/System.Text.Json.dll
Normal file
Binary file not shown.
14
Pricer/bin/Debug/net6.0-windows7.0/appsettings.json
Normal file
14
Pricer/bin/Debug/net6.0-windows7.0/appsettings.json
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
{
|
||||||
|
"ConnectionStrings": {
|
||||||
|
"FirstSolutionDB": "Data Source=26.69.45.60;Initial Catalog=FirstSolutionDB;Persist Security Info=True;User ID=sa;Password=Skyline72"
|
||||||
|
},
|
||||||
|
"exclude": [
|
||||||
|
"**/bin",
|
||||||
|
"**/bower_components",
|
||||||
|
"**/jspm_packages",
|
||||||
|
"**/node_modules",
|
||||||
|
"**/obj",
|
||||||
|
"**/platforms"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="900" height="500" viewBox="0 0 900 500">
|
||||||
|
<rect x="0" y="0" width="100%" height="100%" fill="white"/>
|
||||||
|
<text x="70" y="30" font-family="Segoe UI, Arial" font-size="18" fill="#111">Distribuzione rendimenti vs Bid - IT0006767633</text>
|
||||||
|
<line x1="70" y1="50" x2="70" y2="440" stroke="#333" stroke-width="1"/>
|
||||||
|
<line x1="70" y1="440" x2="870" y2="440" stroke="#333" stroke-width="1"/>
|
||||||
|
<rect x="72" y="438.6219081272085" width="76" height="1.3780918727915195" fill="#D1644A"/>
|
||||||
|
<rect x="152" y="433.26266195524147" width="76" height="6.737338044758539" fill="#D1644A"/>
|
||||||
|
<rect x="232" y="425.7086768747546" width="76" height="14.291323125245386" fill="#D1644A"/>
|
||||||
|
<rect x="312" y="421.8806438947782" width="76" height="18.11935610522183" fill="#D1644A"/>
|
||||||
|
<rect x="392" y="421.9316843345112" width="76" height="18.06831566548881" fill="#D1644A"/>
|
||||||
|
<rect x="472" y="423.2587357675697" width="76" height="16.74126423243031" fill="#D1644A"/>
|
||||||
|
<rect x="552" y="426.93364742834706" width="76" height="13.066352571652926" fill="#D1644A"/>
|
||||||
|
<rect x="632" y="429.23046721633295" width="76" height="10.76953278366706" fill="#D1644A"/>
|
||||||
|
<rect x="712" y="418.767177071064" width="76" height="21.232822928936002" fill="#D1644A"/>
|
||||||
|
<rect x="792" y="50" width="76" height="390" fill="#4A7BD1"/>
|
||||||
|
<text x="70" y="475" font-family="Segoe UI, Arial" font-size="12" fill="#333">-79.05%</text>
|
||||||
|
<line x1="750.8096809680968" y1="50" x2="750.8096809680968" y2="440" stroke="#999" stroke-dasharray="4,3"/>
|
||||||
|
<text x="738.8096809680968" y="475" font-family="Segoe UI, Arial" font-size="12" fill="#333">0%</text>
|
||||||
|
<text x="810" y="475" font-family="Segoe UI, Arial" font-size="12" fill="#333">13.84%</text>
|
||||||
|
<text x="730" y="480" font-family="Segoe UI, Arial" font-size="12" fill="#333">Rendimento (%)</text>
|
||||||
|
<text x="40" y="445" font-family="Segoe UI, Arial" font-size="12" fill="#333">0</text>
|
||||||
|
<text x="30" y="55" font-family="Segoe UI, Arial" font-size="12" fill="#333">7641</text>
|
||||||
|
<text x="15" y="40" font-family="Segoe UI, Arial" font-size="12" fill="#333">Conteggi</text>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.0 KiB |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user