using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using YLErp.Abstract.DataProviders; using YLErp.BLL; using YLErp.DBModels; using YLErp.Helpers; using YLErp.Modules.CalculationModule.Abstract; namespace YLErp.Modules.CalculationModule { [TestClass] public class HedgePnlCalcTest : YLUnitTestBase { [TestMethod] public void TestCalculate() { var valueDate = DateTime.Today; var calc = new InnerHedgePnlCalcContext(true, valueDate, "对冲" , new InnerUnderlyingPriceProvider() , new InnerExchangeOptionPriceProvider(), OptUser).GetHedgePnlCalc(); var exchangeTrades = GetExchangeTrades(); var eodTradePositions = GetEodTradePositions(); var results = calc.Calculate(exchangeTrades, eodTradePositions); Assert.AreEqual(results.Count(), 3); } private IEnumerable GetExchangeTrades() { var valueDate = valuedateBLL.ValueDate; var un = GetUnderlyingManager(true); var baseTrade = new ExchangeTrade { AssetBookId = 1, Comments = "单元测试", Commission = 0, CommissionType = DBModels.Enums.CommissionType.不收取, CreateTime = DateTime.Now, ExchangeAccountCode = "TEST", ExchangeAccountId = 1, ExerciseMode = "European", InstrumentType = ConsGlobal.InstrumentType.CommodityFutures, IsValid = true, MaturityDate = valueDate.AddMonths(1), Notional = 100, OptionCode = "RB00-C-3400", OptionStrike = 3400, TradeAmount = 100, TradeDate = valueDate.AddDays(-10), TradeLots = 10, TradeNumber = Guid.NewGuid().ToString("N"), TraderId = 1, TraderName = "", TradeSide = "多头开仓", TradeSinglePrice = 16, TradeSource = "", OptId = 0, OptDate = valueDate, OptionType = "看涨", OptName = "", TradeType = "场内期权", UnderlyingCode = "RB00", UnderlyingId = un.id, id = 1 }; var td1 = baseTrade.Clone(); td1.TradeType = "商品期权"; td1.TradeSinglePrice = 3233; var td2 = baseTrade.Clone(); td2.id = 2; var td3 = baseTrade.Clone(); td3.id = 3; td3.OptionCode = "RB00-P-3400"; td3.OptionType = "看跌"; return new[] { td1, td2, td3 }; } private IEnumerable GetEodTradePositions() { return null; } } class InnerHedgePnlCalcContext : HedgePnlCalcContext { public InnerHedgePnlCalcContext(bool isEodSettle, DateTime valueDate, string volType , IPriceProvider underlyingPriceProvider, IPriceProvider exchangeOptionPriceProvider, OptUserInfo optUser) : base(isEodSettle, valueDate, volType, underlyingPriceProvider, exchangeOptionPriceProvider, optUser) { CommissionCalc = new InnerExchangeTradeCommissionCalc(); ExchangeOptionPriceUseFlag = ExchangeOptionPriceUseFlag.CalcPv; UnderlyingDataProvider = new InnerUnderlyingDataProvider(); } } }