示例#1
0
 public static Reference ToEntity(this ReferenceContract referenceContract)
 {
     return(new Reference
     {
         Id = referenceContract.Id,
         Company = referenceContract.Company,
         ImageUrl = referenceContract.ImageUrl,
         Name = referenceContract.Name,
         Occupation = referenceContract.Occupation,
         QuoteText = referenceContract.QuoteText
     });
 }
示例#2
0
        public PensionFundInfo GetPensionFundInfo(string pensionFundContractAddress)
        {
            PensionFund pensionFund = GetByContract(pensionFundContractAddress);
            Dictionary <int, double> assetReference = new Dictionary <int, double>();
            List <Asset>             assets         = new List <Asset>();

            foreach (PensionFundReferenceContract reference in pensionFund.Option.PensionFundContract.PensionFundReferenceContract)
            {
                ReferenceContract contract = ReferenceContractBusiness.Get(reference.ReferenceType);
                assets.Add(new Asset()
                {
                    Address    = contract.Address,
                    Name       = contract.Description,
                    Percentage = reference.Percentage
                });
                IEnumerable <ReferenceValue> values = contract.ReferenceValue.OrderBy(c => c.Period);
                double baseValue = values.ElementAt(0).Value;
                foreach (ReferenceValue value in values)
                {
                    if (!assetReference.ContainsKey(value.Period))
                    {
                        assetReference[value.Period] = 0;
                    }
                    assetReference[value.Period] += (value.Value / baseValue) * reference.Percentage / 100;
                }
            }
            return(new PensionFundInfo()
            {
                PensionFundName = pensionFund.Name,
                EmployeeName = pensionFund.Option.Company.Employee.Name,
                CompanyName = pensionFund.Option.Company.Name,
                PensionFundAddress = pensionFund.Option.Address,
                EmployeeAddress = pensionFund.Option.Company.Employee.Address,
                CompanyAddress = pensionFund.Option.Company.Address,
                PensionFundFee = pensionFund.Option.Fee,
                PensionFundLatePenalty = pensionFund.Option.LatePenalty,
                AuctusFee = PensionFundContractBusiness.AUCTUS_FEE,
                ContractAddress = pensionFund.Option.PensionFundContract.Address,
                ContractTransactionHash = pensionFund.Option.PensionFundContract.TransactionHash,
                ContractBlockNumber = pensionFund.Option.PensionFundContract.BlockNumber.Value,
                AssetsReferenceValue = assetReference.Select(c => new AssetsReferenceValue()
                {
                    Period = c.Key, Value = c.Value
                }),
                Assets = assets,
                EmployeeBaseContribution = pensionFund.Option.Company.Employee.Salary * pensionFund.Option.Company.Employee.Contribution / 100,
                CompanyBaseContribution = pensionFund.Option.Company.Employee.Salary * pensionFund.Option.Company.BonusRate / 100 *
                                          Math.Min(pensionFund.Option.Company.MaxSalaryBonusRate, pensionFund.Option.Company.Employee.Contribution) / 100
            });
        }
示例#3
0
 private JsonResult GetJsonFromReferenceContract(ReferenceContract referenceContract)
 {
     return(Json(new { Address = referenceContract.Address, Name = referenceContract.Description,
                       Values = referenceContract.ReferenceValue.Select(c => new double[] { c.Period, c.Value }) }));
 }
示例#4
0
        public FutureTransactionPricer(ILogger logger, ICoreCache cache, string nameSpace, DateTime tradeDate, ExchangeContractTypeEnum futuresType,
                                       IBusinessCalendar settlementCalendar, FutureTransaction futureFpML, string basePartyReference, Boolean forecastRateInterpolation)
        {
            logger.LogInfo("FuturesType set. Commence to build a future transaction.");
            if (futureFpML == null)
            {
                return;
            }
            Multiplier        = 1.0m;
            BuyerReference    = futureFpML.buyerPartyReference.href;
            PaymentCurrencies = new List <string> {
                futureFpML.unitPrice.currency.Value
            };
            SellerReference = futureFpML.sellerPartyReference.href;
            BasePartyBuyer  = basePartyReference == futureFpML.buyerPartyReference.href;
            if (!BasePartyBuyer)
            {
                Multiplier = -1.0m;
            }
            ForecastRateInterpolation = forecastRateInterpolation;
            SettlementCalendar        = settlementCalendar;
            FuturesType       = futuresType;
            ReferenceContract = futureFpML.future.id;
            var futuresCode = ReferenceContract.Split('-')[2];

            NumberOfContracts = Convert.ToInt16(futureFpML.numberOfUnits);
            PurchasePrice     = MoneyHelper.GetAmount(futureFpML.unitPrice.amount, futureFpML.unitPrice.currency.Value);
            var exchangeMIC = futureFpML.future.exchangeId;

            FuturesCurveName  = CurveNameHelpers.GetExchangeTradedCurveName(futureFpML.unitPrice.currency.Value, exchangeMIC.Value, futuresCode);
            DiscountCurveName = CurveNameHelpers.GetDiscountCurveName(futureFpML.unitPrice.currency, true);
            FuturesTypeInfo   = new FutureNodeStruct();
            var exchangeMICData = InstrumentDataHelper.CreateEquityExchangeKey(nameSpace, exchangeMIC.Value);
            var exchangeData    = cache.LoadItem <ExchangeConfigData>(exchangeMICData);

            if (exchangeData?.Data is ExchangeConfigData)
            {
                Exchange = (ExchangeConfigData)exchangeData.Data;
                FuturesTypeInfo.SpotDate = Exchange.SettlementDate;
            }
            if (futureFpML.future != null)
            {
                if (SettlementCalendar == null)
                {
                    SettlementCalendar = BusinessCenterHelper.ToBusinessCalendar(cache,
                                                                                 FuturesTypeInfo.SpotDate
                                                                                 .businessCenters,
                                                                                 nameSpace);
                }
                var future = XmlSerializerHelper.Clone(futureFpML.future);
                FuturesTypeInfo.Future = future;
                if (FuturesTypeInfo.SpotDate != null)
                {
                    SettlementDate = GetSettlementDate(tradeDate, SettlementCalendar,
                                                       FuturesTypeInfo.SpotDate);
                }
                //Instantiate the priceable future.
                NamedValueSet namedValueSet = PriceableAssetFactory.BuildPropertiesForAssets(nameSpace, FuturesTypeInfo.Future.id, tradeDate);
                var           asset         = AssetHelper.Parse(FuturesTypeInfo.Future.id, 0.0m, 0.0m);
                UnderlyingFuture = PriceableAssetFactory.Create(logger, cache, nameSpace, asset.Second, namedValueSet, null, null) as IPriceableFuturesAssetController;
                if (UnderlyingFuture != null)
                {
                    RiskMaturityDate = UnderlyingFuture.GetRiskMaturityDate();
                    MaturityDate     = RiskMaturityDate;
                    LastTradeDate    = UnderlyingFuture.LastTradeDate;
                }
                if (!PaymentCurrencies.Contains(futureFpML.future.currency.Value))
                {
                    PaymentCurrencies.Add(futureFpML.future.currency.Value);
                }
                logger.LogInfo("Futures transaction has been successfully created.");
            }
            else
            {
                logger.LogInfo("Futures type data not available.");
            }
            //Add payments like the settlement price
            if (!PurchasePrice.amountSpecified)
            {
                return;
            }
            var amount            = PurchasePrice.amount * NumberOfContracts / 100;
            var settlementPayment = PaymentHelper.Create("FuturesSettlemetAmount", BuyerReference, SellerReference, amount, SettlementDate);

            AdditionalPayments = PriceableInstrumentsFactory.CreatePriceablePayments(basePartyReference, new[] { settlementPayment }, SettlementCalendar);
            if (!PaymentCurrencies.Contains(settlementPayment.paymentAmount.currency.Value))
            {
                PaymentCurrencies.Add(settlementPayment.paymentAmount.currency.Value);
            }
        }
示例#5
0
 public void Post(ReferenceContract referenceContract)
 {
     _uow.ReferenceRepository.CreateOrUpdate(referenceContract.ToEntity());
 }