namespace YLErp.Modules.TradeModule { /// /// 交易数据转换 /// public static class TradeConverter { /// /// 转换全要素期权数据 /// public static trade ConvertOptionTrade(OtcOptionTradeFull tradeOption) { if (tradeOption is null) { throw new ArgumentNullException(nameof(tradeOption)); } var td = new trade(); YLAutoMapper.Map(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; } /// /// 转换远期交易 /// public static trade ConvertForward(OtcTradeForward tradeForward) { if (tradeForward is null) { throw new ArgumentNullException(nameof(tradeForward)); } var td = new trade(); YLAutoMapper.Map(tradeForward, td); td.trade_forward = YLAutoMapper.Map(tradeForward); td.SalesCommission = tradeForward.SalesCommission; return td; } /// /// 转换为全要素期权数据 /// public static OtcOptionTradeFull ConvertToOptionTrade(trade td) { //TODO:缺少单元测试 if (td is null) { throw new ArgumentNullException(nameof(td)); } var tdFull = new OtcOptionTradeFull(); YLAutoMapper.Map(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; } } }