Files
zszq-trs/YLErpDAL/Modules/TradeModule/TradeConverter.cs
T
2024-05-09 14:06:26 +08:00

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;
}
}
}