using YLErp.Abstract;
using YLErp.Modules.CalculationModule.Abstract;
namespace YLErp.Modules.DataProviderModule
{
///
/// 波动率数据提供
///
public class VolatilityDataProvider : IVolatilityDataProvider
{
readonly UnderlyingVolProvider _UnderlyingVolProvider;
readonly OtcPositionVolProvider _OtcPositionVolProvider;
readonly OtcHedgingVolProvider _OtcHedgingVolProvider;
readonly OtcEodOverrideVolProvider _OtcEodOverrideVolProvider;
readonly ExOptionSavedVolProvider _ExOptionSavedVolProvider;
public VolatilityDataProvider(DateTime valueDate)
{
_UnderlyingVolProvider = new UnderlyingVolProvider(valueDate);
_OtcPositionVolProvider = new OtcPositionVolProvider(valueDate);
_OtcHedgingVolProvider = new OtcHedgingVolProvider(valueDate);
_OtcEodOverrideVolProvider = new OtcEodOverrideVolProvider(valueDate);
_ExOptionSavedVolProvider = new ExOptionSavedVolProvider(valueDate);
}
///
/// 场内期权保存的波动率
///
public double? GetExOptionSavedVol(string optionCode, DateTime valueDate)
{
return _ExOptionSavedVolProvider.GetSavedVol(optionCode, valueDate);
}
///
/// 场外期权对冲波动率
///
public double? GetOtcHedgingVol(int tradeId, DateTime valueDate)
{
return _OtcHedgingVolProvider.GetVol(tradeId, valueDate);
}
///
/// 标的波动率
///
public IVolatility GetUnderlyingVol(DateTime valueDate, string voltype, string contractCode, string userGroup)
{
return _UnderlyingVolProvider.GetVolatility(voltype, contractCode, userGroup);
}
///
/// 场外期权结算波动率
///
public double? GetOtcEodOverrideVol(int tradeId, DateTime valueDate)
{
return _OtcEodOverrideVolProvider.GetVol(tradeId, valueDate);
}
///
/// 场外期权持仓波动率
///
public IOtcTradeVolatility GetOtcPositionVol(int tradeId, DateTime valueDate)
{
return _OtcPositionVolProvider.GetVol(tradeId, valueDate);
}
}
}