155 lines
5.5 KiB
C#
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
|
|
}
|
|
}
|