109 lines
3.6 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|