180 lines
6.5 KiB
C#
180 lines
6.5 KiB
C#
namespace YLErp.Modules.TradeModule
|
|
{
|
|
/// <summary>
|
|
/// 交易数据转换
|
|
/// </summary>
|
|
public static class TradeConverter
|
|
{
|
|
/// <summary>
|
|
/// 转换全要素期权数据
|
|
/// </summary>
|
|
public static trade ConvertOptionTrade(OtcOptionTradeFull tradeOption)
|
|
{
|
|
if (tradeOption is null)
|
|
{
|
|
throw new ArgumentNullException(nameof(tradeOption));
|
|
}
|
|
|
|
var td = new trade();
|
|
|
|
YLAutoMapper.Map<OtcTradeBase, OtcTradeBase>(tradeOption, td);
|
|
|
|
td.TTMDays = tradeOption.TTMDays;
|
|
td.SalesCommission = tradeOption.SalesCommission;
|
|
td.CalcId = tradeOption.CalcId;
|
|
td.UnderlyingPrice = tradeOption.UnderlyingPrice;
|
|
|
|
switch (td.TradeType == "结构化交易" ? td.StructureType : td.TradeType)
|
|
{
|
|
case "香草期权":
|
|
case "合成价差期权":
|
|
break;
|
|
case "障碍期权":
|
|
YLAutoMapper.Map(tradeOption, td.trade_barrier_option);
|
|
break;
|
|
case "Risky期权":
|
|
YLAutoMapper.Map(tradeOption, td.trade_risky_option);
|
|
td.Strike = td.trade_risky_option.Strike1;
|
|
break;
|
|
case "二元期权":
|
|
YLAutoMapper.Map(tradeOption, td.trade_binary_option);
|
|
break;
|
|
case "亚式期权":
|
|
YLAutoMapper.Map(tradeOption, td.trade_asian_option);
|
|
break;
|
|
case "彩虹期权":
|
|
YLAutoMapper.Map(tradeOption, td.trade_rainbow_option);
|
|
break;
|
|
case "价差期权":
|
|
YLAutoMapper.Map(tradeOption, td.trade_spread_option);
|
|
break;
|
|
case "双鲨期权":
|
|
YLAutoMapper.Map(tradeOption, td.trade_double_sharkfin_option);
|
|
break;
|
|
case "区间累积期权":
|
|
YLAutoMapper.Map(tradeOption, td.trade_rangeaccrual);
|
|
break;
|
|
case "凤凰期权":
|
|
YLAutoMapper.Map(tradeOption, td.trade_autocall);
|
|
break;
|
|
case "雪球期权":
|
|
YLAutoMapper.Map(tradeOption, td.trade_snowball);
|
|
if(tradeOption.IsInitialKnockedIn)
|
|
{
|
|
td.trade_snowball.ObservationDates = null;
|
|
td.trade_snowball.KIBarrier = 0;
|
|
td.trade_snowball.KnockInOutDate = td.TradeDate;
|
|
td.trade_snowball.KnockInOutStatus = ConsTrade.KnockState.KnockedIn;
|
|
}
|
|
break;
|
|
case "气囊结构":
|
|
YLAutoMapper.Map(tradeOption, td.trade_airbag);
|
|
break;
|
|
case "收益增强结构":
|
|
YLAutoMapper.Map(tradeOption, td.trade_underlying_enhance);
|
|
break;
|
|
case "累计期权":
|
|
YLAutoMapper.Map(tradeOption, td.trade_accumulator_option);
|
|
break;
|
|
case "现金流交易":
|
|
YLAutoMapper.Map(tradeOption, td.trade_cashflow);
|
|
break;
|
|
case "自定义交易":
|
|
YLAutoMapper.Map(tradeOption, td.trade_custom);
|
|
break;
|
|
}
|
|
|
|
return td;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 转换远期交易
|
|
/// </summary>
|
|
public static trade ConvertForward(OtcTradeForward tradeForward)
|
|
{
|
|
if (tradeForward is null)
|
|
{
|
|
throw new ArgumentNullException(nameof(tradeForward));
|
|
}
|
|
|
|
var td = new trade();
|
|
|
|
YLAutoMapper.Map<OtcTradeBase, OtcTradeBase>(tradeForward, td);
|
|
|
|
td.trade_forward = YLAutoMapper.Map<trade_forward>(tradeForward);
|
|
|
|
td.SalesCommission = tradeForward.SalesCommission;
|
|
|
|
return td;
|
|
}
|
|
|
|
/// <summary>
|
|
/// 转换为全要素期权数据
|
|
/// </summary>
|
|
public static OtcOptionTradeFull ConvertToOptionTrade(trade td)
|
|
{
|
|
//TODO:缺少单元测试
|
|
|
|
if (td is null)
|
|
{
|
|
throw new ArgumentNullException(nameof(td));
|
|
}
|
|
|
|
var tdFull = new OtcOptionTradeFull();
|
|
|
|
YLAutoMapper.Map<OtcTradeBase, OtcTradeBase>(td, tdFull);
|
|
|
|
tdFull.TTMDays = td.TTMDays;
|
|
tdFull.SalesCommission = td.SalesCommission;
|
|
|
|
switch (td.TradeType)
|
|
{
|
|
case "香草期权":
|
|
case "合成价差期权":
|
|
break;
|
|
case "障碍期权":
|
|
YLAutoMapper.Map(td.trade_barrier_option, tdFull);
|
|
break;
|
|
case "Risky期权":
|
|
YLAutoMapper.Map(td.trade_risky_option, tdFull);
|
|
break;
|
|
case "二元期权":
|
|
YLAutoMapper.Map(td.trade_binary_option, tdFull);
|
|
break;
|
|
case "亚式期权":
|
|
YLAutoMapper.Map(td.trade_asian_option, tdFull);
|
|
break;
|
|
case "彩虹期权":
|
|
YLAutoMapper.Map(td.trade_rainbow_option, tdFull);
|
|
break;
|
|
case "价差期权":
|
|
YLAutoMapper.Map(td.trade_spread_option, tdFull);
|
|
break;
|
|
case "双鲨期权":
|
|
YLAutoMapper.Map(td.trade_double_sharkfin_option, tdFull);
|
|
break;
|
|
case "区间累积期权":
|
|
YLAutoMapper.Map(td.trade_rangeaccrual, tdFull);
|
|
break;
|
|
case "凤凰期权":
|
|
YLAutoMapper.Map(td.trade_autocall, tdFull);
|
|
break;
|
|
case "雪球期权":
|
|
YLAutoMapper.Map(td.trade_snowball, tdFull);
|
|
break;
|
|
case "气囊结构":
|
|
YLAutoMapper.Map(td.trade_airbag, tdFull);
|
|
break;
|
|
case "收益增强结构":
|
|
YLAutoMapper.Map(td.trade_underlying_enhance, tdFull);
|
|
break;
|
|
case "现金流交易":
|
|
YLAutoMapper.Map(td.trade_cashflow, tdFull);
|
|
break;
|
|
}
|
|
|
|
return tdFull;
|
|
}
|
|
}
|
|
}
|