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

155 lines
5.5 KiB
C#

namespace YLErp.Modules.TradeModule.AccumulatorOptionModule
{
/// <summary>
///
/// </summary>
public static class TradeAccumulatorHelper
{
#region----换月----
public static IEnumerable<TradeAccumulatorChangeData> GetChangeDatas(IEnumerable<TradeAction> actions)
{
if (actions == null)
{
return Enumerable.Empty<TradeAccumulatorChangeData>();
}
return actions.Where(x => x.ActionType == TradeActionType.AccumulatorChange)
.Select(x => JsonHelper.Deserialize<TradeAccumulatorChangeData>(x.ActionData)).ToArray();
}
/// <summary>
/// 获取默认的换月数据
/// </summary>
public static TData GetDefaultChangeData<TData>(DateTime valueDate, OtcTradeBase td, trade_accumulator_option tdAcc)
where TData : TradeAccumulatorChangeData, new()
{
return new TData
{
ValueDate = valueDate.OtcFormatDate(),
KOBarrier = tdAcc.KOBarrier,
KOObservationDates = tdAcc.KOObservationDates,
KOObservationSettleDates = tdAcc.KOObservationSettleDates,
Strike = td.Strike ?? 0,
UnderlyingCode = td.UnderlyingCode
};
}
/// <summary>
/// 使用换月数据还原交易数据
/// </summary>
public static void RestoreAccumulatorChangeData(OtcOptionTradeFull td, string changeDataJson, underlying_manager um = null)
{
if (td is null)
{
throw new ArgumentNullException(nameof(td));
}
if (string.IsNullOrWhiteSpace(changeDataJson))
{
throw new ServiceException("换月设置数据为空,请检查数据是否损坏!");
}
var changeData = JsonHelper.Deserialize<TradeAccumulatorChangeData>(changeDataJson);
if (um == null)
{
um = DataCacheProvider.GetUnderlyingDataSource().GetData(changeData.UnderlyingCode);
if (um == null)
{
throw new ServiceException("找不到标的信息:" + changeData.UnderlyingCode);
}
}
td.UnderlyingId = um.id;
td.UnderlyingCode = changeData.UnderlyingCode;
td.UnderlyingAssetClass = um.UnderlyingType;
td.UnderlyingAssetName = um.UnderlyingName;
td.UnderlyingInstrumentType = um.UnderlyingInstrumentType;
td.Strike = changeData.Strike;
td.KOBarrier = changeData.KOBarrier;
td.KOObservationDates = changeData.KOObservationDates;
td.KOObservationSettleDates = changeData.KOObservationSettleDates;
}
/// <summary>
/// 使用换月数据还原交易数据
/// </summary>
public static void RestoreAccumulatorChangeData(trade td, string changeDataJson, underlying_manager um = null)
{
if (td is null)
{
throw new ArgumentNullException(nameof(td));
}
if (string.IsNullOrWhiteSpace(changeDataJson))
{
throw new ServiceException("换月设置数据为空,请检查数据是否损坏!");
}
var changeData = JsonHelper.Deserialize<TradeAccumulatorChangeData>(changeDataJson);
RestoreAccumulatorChangeData(td, td.trade_accumulator_option, changeData, um);
}
/// <summary>
/// 使用换月数据还原交易数据
/// </summary>
public static void RestoreAccumulatorChangeData(OtcTradeBase td, trade_accumulator_option tdAcc, TradeAccumulatorChangeData changeData, underlying_manager um = null)
{
if (td is null)
{
throw new ArgumentNullException(nameof(td));
}
if (changeData is null)
{
throw new ArgumentNullException(nameof(changeData));
}
if (um == null)
{
um = DataCacheProvider.GetUnderlyingDataSource().GetData(changeData.UnderlyingCode);
if (um == null)
{
throw new ServiceException("找不到标的信息:" + changeData.UnderlyingCode);
}
}
td.UnderlyingId = um.id;
td.UnderlyingCode = changeData.UnderlyingCode;
td.UnderlyingAssetClass = um.UnderlyingType;
td.UnderlyingAssetName = um.UnderlyingName;
td.UnderlyingInstrumentType = um.UnderlyingInstrumentType;
td.MaturityDate = um.MaturityDate;
td.Strike = changeData.Strike;
if (tdAcc != null)
{
tdAcc.KOBarrier = changeData.KOBarrier;
tdAcc.KOObservationDates = changeData.KOObservationDates;
tdAcc.KOObservationSettleDates = changeData.KOObservationSettleDates;
}
}
/// <summary>
/// 使用换月数据还原交易数据
/// </summary>
public static void RestoreAccumulatorChangeData(OtcTradeBase td, trade_accumulator_option tdAcc, string changeDataJson, underlying_manager um = null)
{
if (string.IsNullOrWhiteSpace(changeDataJson))
{
return;
}
var changeData = JsonHelper.Deserialize<TradeAccumulatorChangeData>(changeDataJson);
RestoreAccumulatorChangeData(td, tdAcc, changeData, um);
}
#endregion
}
}