Files
zszq-trs/YLErpUnitTest/Modules/CalculationModule/HedgePnlCalcTest.cs
T
2024-05-09 14:06:26 +08:00

109 lines
3.6 KiB
C#

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<ExchangeTrade> 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<EodTradePosition> 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();
}
}
}