using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using YLErp.BLL.MarginCalculation;
using YLErp.Modules.DataProviderModule;
namespace YLErp.Modules.CalcModules
{
[TestClass]
public class MarginCalculationTest
{
///
/// 测试招证预付金
///
[TestMethod]
public void ZhaoZhengMarginCalculation_RunMarginCalculation()
{
//List tradeList = new List();
//var db = DbContextFactory.GetYLDbContext();
//var tradeNumbers = new List() { "CW20221207OP220919005X", "CW20221207OP220919006X" };
//tradeList.AddRange(db.trade.Where(O => tradeNumbers.Contains(O.TradeNumber)));
var tradeJson = "[{\"MaturityWorkDay\":14,\"ShowNotional\":-1.0,\"MaturityDay\":28,\"TradeOpenVolatilityString\":\"30.00%\",\"ExerciseDateString\":\"2023-02-03\",\"ActualStrike\":5946.0,\"StrikeString\":\"5,946.000000\",\"TradeSinglePriceString\":\"434.2263\",\"TradeDateString\":\"2022-09-19\",\"StockEqvNotionalToShow\":5936.0,\"SettlementTypeDesc\":\"收盘价\",\"StrikeToShow\":\"5,946.000000\",\"CurNotional\":0.0,\"LastDayNotional\":0.0,\"UnWindTimes\":0,\"DividendRatio\":0.0,\"UnderlyingInstrumentTypeCn\":\"商品期货\",\"ExerciseModeCn\":\"欧式\",\"SummaryType\":\"欧式香草看涨\",\"trade_forward\":{\"id\":0,\"TradeId\":0,\"OpenCommission\":0.0,\"AnnualMarginRate\":0.0,\"AnnualStoragePrice\":0.0,\"ForwardValue\":0.0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_asian_option\":{\"StrikeGearingFactor\":1.0,\"EnhancedPrice\":0.0,\"StrikeTypeCn\":\"\",\"PayoffTypeCn\":\"\",\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_rainbow_option\":{\"Vol2\":0.0,\"UnderlyingCodes\":[null,null],\"Strikes\":[0.0,0.0],\"SpotPrices\":[0.0,0.0],\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_barrier_option\":{\"KnockInOutStatusCn\":\"观察中\",\"IsDiscrete\":false,\"RebateAnnualizedAtKO\":false,\"RebateTypeCn\":\"\",\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_risky_option\":{\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_binary_option\":{\"RebateTypeCn\":\"\",\"PayoffType\":\"\",\"RebateAnnualizedAtKO\":false,\"UpperBarrierRelative\":\"0\",\"IsDiscreteMonitored\":false,\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_spread_option\":{\"Payoff\":\"S1-S2\",\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_double_sharkfin_option\":{\"KnockInOutStatusCn\":\"观察中\",\"IsDiscrete\":false,\"BarrierHigh\":0.0,\"BarrierLow\":0.0,\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_autocall\":{\"KnockInOutStatusCn\":\"观察中\",\"KOBarrier\":0.0,\"KIBarrier\":0.0,\"CouponBarrier\":0.0,\"Coupon\":0.0,\"IsFixedCoupon\":false,\"CouponPayType\":0,\"CouponPayAtMaturity\":false,\"IncludeCouponAfterKI\":false,\"IsAnnualized2\":false,\"CouponDayCount\":\"Act365\",\"KIPayoffType\":0,\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_snowball\":{\"IsInitialKnockedIn\":false,\"KnockInOutStatusCn\":\"观察中\",\"KOBarrier\":0.0,\"KIBarrier\":0.0,\"Coupon\":0.0,\"KORebate\":0.0,\"KORebateType\":0,\"IsFixedCoupon\":false,\"KOPayoffType\":0,\"KIPayoffType\":0,\"IsAnnualized2\":false,\"PrepaymentUsed\":false,\"KIObservationType\":0,\"KOBarrierAdjustStep\":0.0,\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_rangeaccrual\":{\"LowerRange\":0.0,\"UpperRange\":0.0,\"BonusRate\":0.0,\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_airbag\":{\"KnockInOutStatusCn\":\"观察中\",\"HighStrike\":0.0,\"HasPayoffLimit\":false,\"Barrier\":0.0,\"KIParticipationRate\":0.0,\"IsDiscreteMonitored\":false,\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_accumulator_option\":{\"AccumuTradeAmount\":0.0,\"OriginalAccumuTradeAmount\":0.0,\"AccumuType\":\"\",\"Coupon\":0.0,\"CouponPercent\":false,\"IsFixedCoupon\":false,\"PutMultiplier\":1.0,\"CallMultiplier\":1.0,\"EarlyTerminate\":false,\"AccumulatorStructureType\":0,\"KnockInOutStatusCn\":\"观察中\",\"StrikeGearingFactor\":1.0,\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_swap\":{\"IsGetFloatingProfit\":false,\"GetSwapRate\":0.0,\"GetMarginRate\":0.0,\"IsPayFloatingProfit\":false,\"PaySwapRate\":0.0,\"RateCalcMode\":\"11\",\"IncludeFirstDay\":true,\"PayMarginRate\":0.0,\"AnnualVarIncome\":false,\"SettlementPayType\":0,\"IsTradePriceWhenOpen\":false,\"IsShare\":false,\"GetCountRatio\":0.0,\"PayCountRatio\":0.0,\"GetContractSize\":0.0,\"PayContractSize\":0.0,\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"get_trade_swap_details\":[],\"pay_trade_swap_details\":[],\"trade_underlying_enhance\":{\"AnnualizedEnhanceRate\":0.0,\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_cashflow\":{\"ProfitRate\":0.0,\"RateType\":0,\"DepositType\":0,\"PrepayRatio\":0.0,\"ProfitDayCount\":\"Act365\",\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_custom\":{\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_swap_gj\":{},\"TradeType\":\"香草期权\",\"TradeSavedVol\":0.3,\"CreateDate\":\"2023-01-04 10:53:42\",\"PairTrade\":\"\",\"TradeSinglePrice\":434.2263,\"GroupName\":\"\",\"NumOfSmoothingDays\":1,\"ParentTradeId\":120471,\"TradeCloseVolatility\":0.3,\"TradeOpenVolatility\":0.3,\"CheckTradeUpdate\":1,\"InitialSpotPrice\":5936.0,\"IsMoneynessOption\":\"否\",\"TradeAmount\":1.0,\"TradeUnit\":\"\",\"StockEqvNotional\":5936.0,\"StockEqvNotionalMax\":5936.0,\"StockEqvNotionalReal\":5936.0,\"VolType\":\"交易\",\"UnderlyingInstrumentType\":\"CommodityFutures\",\"ExerciseDate\":\"2023-02-03 00:00:00\",\"TraderName\":\"初始用户\",\"TraderId\":170,\"Strike\":5946.0,\"UnderlyingId\":31590,\"AssetBookName\":\"保险+期货项目\",\"AssetId\":146,\"Notional\":1.0,\"OptionType\":\"看涨\",\"ExerciseMode\":\"European\",\"NoRiskRate\":0.0121,\"SpotPrice\":5936.0,\"TradeNumber\":\"CW20221207OP220919005X\",\"ClientId\":1558,\"ClientName\":\"张兰\",\"UnderlyingCode\":\"A00\",\"UnderlyingAssetClass\":\"黄大豆1号\",\"TradeDate\":\"2022-09-19 00:00:00\",\"BuySell\":\"买入\",\"StartDate\":\"2022-09-19 00:00:00\",\"MaturityDate\":\"2039-12-31 00:00:00\",\"TradePrice\":434.23,\"TradeStatus\":\"确认成交\",\"ProcessStatus\":\"通过审批\",\"ProcessOrderId\":-2,\"ProcessOrderBranch\":0,\"ProcessOptDate\":\"2023-01-04 10:54:45\",\"SettlementType\":0,\"ValidState\":\"Valid\",\"Lots\":0.1,\"OriginalNotional\":1.0,\"TradeSource\":\"系统交易\",\"OriginalStockEqvNotional\":5936.0,\"OriginalStockEqvNotionalV2\":5936.0,\"IsUsePremiumRate\":false,\"IsTradePricePayType\":false,\"IsAnnualized\":false,\"AnnualizeFactor\":1.0,\"ParticipationRate\":1.0,\"PrincipalRate\":0.0,\"OriginalPrincipalSum\":0.0,\"PrincipalRateWrite\":0.0,\"SettlementDate\":\"2023-02-03 00:00:00\",\"SettlementFlag\":0,\"SettlementFlagStr\":\"否\",\"CalcFlag\":0,\"PremiumPayDate\":\"2022-09-19 00:00:00\",\"PremiumRate\":0.07315133,\"UnderlyingAssetName\":\"黄大豆1号11811合约\",\"OpponentRole\":\"乙方\",\"DurationDays\":138,\"StructureType\":\"自定义黑箱结构\",\"InitialMargin\":0.0,\"MarginTemplateName\":\"系统默认\",\"MarginType\":0,\"MarginRate\":0.0,\"PositionMarginRate\":0.0,\"QuoteCurrency\":\"USD\",\"IsGroup\":2,\"IsNight\":false,\"Propertys\":[],\"OptId\":170,\"OptName\":\"初始用户\",\"OptDate\":\"2023-01-04 10:54:45\",\"IsApproval\":false,\"Warning\":false,\"DividendDate\":\"2000-01-01 00:00:00\",\"CountRatio\":1,\"CallPut\":\"Call\",\"IsMoneynessOptionData\":false,\"MetaDic\":{},\"TradeMultipleType\":\"欧式香草看涨\",\"id\":120468,\"EncryptId\":\"hpVYU8I-FVjdGvlvHAEFzg\"}," +
"{\"MaturityWorkDay\":14,\"ShowNotional\":-1.0,\"MaturityDay\":28,\"TradeOpenVolatilityString\":\"30.00%\",\"ExerciseDateString\":\"2023-02-03\",\"ActualStrike\":5936.0,\"StrikeString\":\"5,936.000000\",\"TradeSinglePriceString\":\"434.2263\",\"TradeDateString\":\"2022-09-19\",\"StockEqvNotionalToShow\":5936.0,\"SettlementTypeDesc\":\"收盘价\",\"StrikeToShow\":\"5,936.000000\",\"CurNotional\":0.0,\"LastDayNotional\":0.0,\"UnWindTimes\":0,\"DividendRatio\":0.0,\"UnderlyingInstrumentTypeCn\":\"商品期货\",\"ExerciseModeCn\":\"欧式\",\"SummaryType\":\"欧式香草看涨\",\"trade_forward\":{\"id\":0,\"TradeId\":0,\"OpenCommission\":0.0,\"AnnualMarginRate\":0.0,\"AnnualStoragePrice\":0.0,\"ForwardValue\":0.0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_asian_option\":{\"StrikeGearingFactor\":1.0,\"EnhancedPrice\":0.0,\"StrikeTypeCn\":\"\",\"PayoffTypeCn\":\"\",\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_rainbow_option\":{\"Vol2\":0.0,\"UnderlyingCodes\":[null,null],\"Strikes\":[0.0,0.0],\"SpotPrices\":[0.0,0.0],\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_barrier_option\":{\"KnockInOutStatusCn\":\"观察中\",\"IsDiscrete\":false,\"RebateAnnualizedAtKO\":false,\"RebateTypeCn\":\"\",\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_risky_option\":{\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_binary_option\":{\"RebateTypeCn\":\"\",\"PayoffType\":\"\",\"RebateAnnualizedAtKO\":false,\"UpperBarrierRelative\":\"0\",\"IsDiscreteMonitored\":false,\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_spread_option\":{\"Payoff\":\"S1-S2\",\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_double_sharkfin_option\":{\"KnockInOutStatusCn\":\"观察中\",\"IsDiscrete\":false,\"BarrierHigh\":0.0,\"BarrierLow\":0.0,\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_autocall\":{\"KnockInOutStatusCn\":\"观察中\",\"KOBarrier\":0.0,\"KIBarrier\":0.0,\"CouponBarrier\":0.0,\"Coupon\":0.0,\"IsFixedCoupon\":false,\"CouponPayType\":0,\"CouponPayAtMaturity\":false,\"IncludeCouponAfterKI\":false,\"IsAnnualized2\":false,\"CouponDayCount\":\"Act365\",\"KIPayoffType\":0,\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_snowball\":{\"IsInitialKnockedIn\":false,\"KnockInOutStatusCn\":\"观察中\",\"KOBarrier\":0.0,\"KIBarrier\":0.0,\"Coupon\":0.0,\"KORebate\":0.0,\"KORebateType\":0,\"IsFixedCoupon\":false,\"KOPayoffType\":0,\"KIPayoffType\":0,\"IsAnnualized2\":false,\"PrepaymentUsed\":false,\"KIObservationType\":0,\"KOBarrierAdjustStep\":0.0,\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_rangeaccrual\":{\"LowerRange\":0.0,\"UpperRange\":0.0,\"BonusRate\":0.0,\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_airbag\":{\"KnockInOutStatusCn\":\"观察中\",\"HighStrike\":0.0,\"HasPayoffLimit\":false,\"Barrier\":0.0,\"KIParticipationRate\":0.0,\"IsDiscreteMonitored\":false,\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_accumulator_option\":{\"AccumuTradeAmount\":0.0,\"OriginalAccumuTradeAmount\":0.0,\"AccumuType\":\"\",\"Coupon\":0.0,\"CouponPercent\":false,\"IsFixedCoupon\":false,\"PutMultiplier\":1.0,\"CallMultiplier\":1.0,\"EarlyTerminate\":false,\"AccumulatorStructureType\":0,\"KnockInOutStatusCn\":\"观察中\",\"StrikeGearingFactor\":1.0,\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_swap\":{\"IsGetFloatingProfit\":false,\"GetSwapRate\":0.0,\"GetMarginRate\":0.0,\"IsPayFloatingProfit\":false,\"PaySwapRate\":0.0,\"RateCalcMode\":\"11\",\"IncludeFirstDay\":true,\"PayMarginRate\":0.0,\"AnnualVarIncome\":false,\"SettlementPayType\":0,\"IsTradePriceWhenOpen\":false,\"IsShare\":false,\"GetCountRatio\":0.0,\"PayCountRatio\":0.0,\"GetContractSize\":0.0,\"PayContractSize\":0.0,\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"get_trade_swap_details\":[],\"pay_trade_swap_details\":[],\"trade_underlying_enhance\":{\"AnnualizedEnhanceRate\":0.0,\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_cashflow\":{\"ProfitRate\":0.0,\"RateType\":0,\"DepositType\":0,\"PrepayRatio\":0.0,\"ProfitDayCount\":\"Act365\",\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_custom\":{\"id\":0,\"TradeId\":0,\"EncryptId\":\"D1k5faKQ2YC4qnUw579Wig\"},\"trade_swap_gj\":{},\"TradeType\":\"香草期权\",\"TradeSavedVol\":0.3,\"CreateDate\":\"2023-01-04 10:53:42\",\"PairTrade\":\"\",\"TradeSinglePrice\":434.2263,\"GroupName\":\"\",\"NumOfSmoothingDays\":1,\"ParentTradeId\":120471,\"TradeCloseVolatility\":0.3,\"TradeOpenVolatility\":0.3,\"CheckTradeUpdate\":1,\"InitialSpotPrice\":5936.0,\"IsMoneynessOption\":\"否\",\"TradeAmount\":1.0,\"TradeUnit\":\"\",\"StockEqvNotional\":5936.0,\"StockEqvNotionalMax\":5936.0,\"StockEqvNotionalReal\":5936.0,\"VolType\":\"交易\",\"UnderlyingInstrumentType\":\"CommodityFutures\",\"ExerciseDate\":\"2023-02-03 00:00:00\",\"TraderName\":\"初始用户\",\"TraderId\":170,\"Strike\":5936.0,\"UnderlyingId\":31590,\"AssetBookName\":\"保险+期货项目\",\"AssetId\":146,\"Notional\":1.0,\"OptionType\":\"看涨\",\"ExerciseMode\":\"European\",\"NoRiskRate\":0.0121,\"SpotPrice\":5936.0,\"TradeNumber\":\"CW20221207OP220919006X\",\"ClientId\":1558,\"ClientName\":\"张兰\",\"UnderlyingCode\":\"A00\",\"UnderlyingAssetClass\":\"黄大豆1号\",\"TradeDate\":\"2022-09-19 00:00:00\",\"BuySell\":\"买入\",\"StartDate\":\"2022-09-19 00:00:00\",\"MaturityDate\":\"2039-12-31 00:00:00\",\"TradePrice\":434.23,\"TradeStatus\":\"确认成交\",\"ProcessStatus\":\"通过审批\",\"ProcessOrderId\":-2,\"ProcessOrderBranch\":0,\"ProcessOptDate\":\"2023-01-04 10:54:45\",\"SettlementType\":0,\"ValidState\":\"Valid\",\"Lots\":0.1,\"OriginalNotional\":1.0,\"TradeSource\":\"系统交易\",\"OriginalStockEqvNotional\":5936.0,\"OriginalStockEqvNotionalV2\":5936.0,\"IsUsePremiumRate\":false,\"IsTradePricePayType\":false,\"IsAnnualized\":false,\"AnnualizeFactor\":1.0,\"ParticipationRate\":1.0,\"PrincipalRate\":0.0,\"OriginalPrincipalSum\":0.0,\"PrincipalRateWrite\":0.0,\"SettlementDate\":\"2023-02-03 00:00:00\",\"SettlementFlag\":0,\"SettlementFlagStr\":\"否\",\"CalcFlag\":0,\"PremiumPayDate\":\"2022-09-19 00:00:00\",\"PremiumRate\":0.07315133,\"UnderlyingAssetName\":\"黄大豆1号11811合约\",\"OpponentRole\":\"乙方\",\"DurationDays\":138,\"StructureType\":\"自定义黑箱结构\",\"InitialMargin\":0.0,\"MarginTemplateName\":\"系统默认\",\"MarginType\":0,\"MarginRate\":0.0,\"PositionMarginRate\":0.0,\"QuoteCurrency\":\"USD\",\"IsGroup\":2,\"IsNight\":false,\"Propertys\":[],\"OptId\":170,\"OptName\":\"初始用户\",\"OptDate\":\"2023-01-04 10:54:45\",\"IsApproval\":false,\"Warning\":false,\"DividendDate\":\"2000-01-01 00:00:00\",\"CountRatio\":1,\"CallPut\":\"Call\",\"IsMoneynessOptionData\":false,\"MetaDic\":{},\"TradeMultipleType\":\"欧式香草看涨\",\"id\":120469,\"EncryptId\":\"Sm5h53s-HKd6axDkSIXGGQ\"}]";
List tradeList = JsonHelper.Deserialize>(tradeJson);
var req = new RunMarginCalculationReq(OptUserInfo.UnitTestUser)
{
CalcMarginType = Enums.CalcMarginTypeEnum.InitialMargin,
PriceProvider = new ManualPriceProvider(new Dictionary() { { "A00", 6300 } }),
realTradeId = 0,
settleDate = new DateTime(2022, 12, 23),
settlementType = SettlementTypeEnum.ClosePrice,
tradeList = tradeList
};
var tradeSpanList = ZhaoZhengMarginCalculation.Instance.RunMarginCalculation(req);
Assert.IsNotNull(tradeSpanList);
Assert.IsTrue(tradeSpanList.Count == 2);
Assert.IsTrue(tradeSpanList[0].WorstCastClientPayable == 994.80888800181526);
Assert.IsTrue(tradeSpanList[1].WorstCastClientPayable == 1004.274225425179);
}
}
}