using Microsoft.VisualStudio.TestTools.UnitTesting; using System; using System.Linq; using YLErp.DBModels; namespace YLErp.Modules.VolatilityModule { [TestClass] public class VolatilityQueryServiceTest : YLUnitTestBase { readonly VolatilityQueryService service; public VolatilityQueryServiceTest() { service = new VolatilityQueryService(new OptUserInfo(0, "UnitTest")); } [TestMethod("获取单个标的的曲面波动率")] public void TestGetVolatility() { var date = new DateTime(2020, 4, 20); //标的不存在的情况下获取不到波动率 var vols = service.GetVolatility(new SingleVolatilityRequest { QuotationDate = date, TradeVolWithBidAsk = true, UnderlyingId = 1, UnderlyingCode = "TA006", UserGroup = "", VolType = "交易" }); Assert.AreEqual(vols.Count(), 0); //同源标的不存在波动率的情况下获取默认波动率 var vols2 = service.GetVolatility(new SingleVolatilityRequest { QuotationDate = date, TradeVolWithBidAsk = true, UnderlyingCode = "AP005", UserGroup = "", VolType = "交易" }); Assert.AreEqual(vols2.Count(), 3); Assert.AreEqual(vols2.First().VolTable[0].Vol, 0.3); Assert.AreEqual(vols2.First().QuotationDate, date); var vols3 = service.GetVolatility(new SingleVolatilityRequest { QuotationDate = date, TradeVolWithBidAsk = true, UnderlyingId = 14, //UnderlyingCode = "AP005", UserGroup = "", VolType = "交易" }); Assert.AreEqual(vols3.Count(), 3); Assert.AreEqual(vols3.First().VolTable[0].Vol, 0.3); Assert.AreEqual(vols3.First().QuotationDate, date); //标的已过期的情况下返回波动率为0的默认波动率 var vols4 = service.GetVolatility(new SingleVolatilityRequest { QuotationDate = date, TradeVolWithBidAsk = true, UnderlyingCode = "RB2003", UserGroup = "", VolType = "交易" }); Assert.AreEqual(vols4.Count(), 3); Assert.AreEqual(vols4.First().VolTable[0].Vol, 0); Assert.AreEqual(vols4.First().QuotationDate, date); } [TestMethod("获取单个标的的曲面波动率2")] public void TestGetVolatility2() { var date = DateTime.Today; var vols = service.GetVolatility(new SingleVolatilityRequest { QuotationDate = date, TradeVolWithBidAsk = true, UnderlyingCode = "AL00", VolType = "交易" }); Assert.AreEqual(vols.Count(), 0); } [TestMethod("获取批量标的的曲面波动率")] public void TestGetVolatilities() { var vols = service.GetVolatilities(new BatchVolatilityRequest { QuotationDate = DateTime.Today, TradeVolWithBidAsk = true, UserGroup = string.Empty, VolType = "交易" }, true); } [TestMethod("验证波动率复制")] public void TestMissingVolatilities() { var un = GetUnderlyingManager(); AddClearSQL($"{nameof(volatility.ContractCode)}='{un.UnderlyingCode}'"); var vols = service.GetVolatility(new SingleVolatilityRequest { QuotationDate = DateTime.Today, TradeVolWithBidAsk = false, UserGroup = string.Empty, VolType = "交易", UnderlyingCode = un.UnderlyingCode, UnderlyingId = un.id }, true); Assert.IsTrue(vols.Count() == 1 && vols.First().VolTable[0].Vol == 0.3); var vols2 = service.GetVolatility(new SingleVolatilityRequest { QuotationDate = DateTime.Today, TradeVolWithBidAsk = true, UserGroup = string.Empty, VolType = "交易", UnderlyingCode = un.UnderlyingCode, UnderlyingId = un.id }, true); Assert.IsTrue(vols2.Count() == 3 && vols2.First().VolTable[0].Vol == 0.3); } } }