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

159 lines
5.6 KiB
C#

using Qdp.Foundation.Implementations;
using YLErp.QdpModule;
namespace YLErp.Modules.TradeModule
{
/// <summary>
/// 交易观察频率帮助类(迁移自tradeController)
/// </summary>
public static class TradeObservationHelper
{
/// <summary>
///
/// </summary>
/// <param name="observationDates"></param>
/// <param name="valueDate"></param>
/// <returns></returns>
public static double? GetPriceByDate(string observationDates, DateTime valueDate)
{
var customizedResults = QdpHelper.ParseAutocallCustomizedInfo(observationDates);
return GetPriceByDate(customizedResults, valueDate);
}
/// <summary>
/// 与GetPriceByDate 区别 处理 凤凰敲出观察频率 与 票息观察频率区分 ,现在 敲出观察频率只有 观察日期 和障碍价格
/// </summary>
public static double? GetPriceByDateV2(string observationDates, DateTime valueDate)
{
var customizedResults = QdpHelper.ParseAutocallCustomizedInfoV3(observationDates);
return GetPriceByDateV2(customizedResults, valueDate);
}
/// <summary>
///
/// </summary>
/// <param name="customizedResults"></param>
/// <param name="valueDate"></param>
/// <returns></returns>
public static double? GetPriceByDate(Tuple<Date[], double[], double[]> customizedResults, DateTime valueDate)
{
var dates = customizedResults.Item1;
if (dates == null)
{
return null;
}
var prices = customizedResults.Item2;
var date = dates.FirstOrDefault(x => x.DateTime == valueDate);
if (date != null)
{
if (prices != null && prices.Any())
{
var price = prices[GetDateIndex(dates, date)];
return price;
}
}
return null;
}
public static double? GetPriceByDateV2(Tuple<Date[], double[]> customizedResults, DateTime valueDate)
{
var dates = customizedResults.Item1;
if (dates == null)
{
return null;
}
var prices = customizedResults.Item2;
var date = dates.FirstOrDefault(x => x.DateTime == valueDate);
if (date != null)
{
if (prices != null && prices.Any())
{
var price = prices[GetDateIndex(dates, date)];
return price;
}
}
return null;
}
public static int GetDateIndex(Date[] source, Date value)
{
var index = 0;
foreach (var item in source)
{
if (item.DateTime == value.DateTime)
{
return index;
}
index++;
}
return -1;
}
/// <summary>
/// 凤凰 观察频率处理
/// </summary>
/// <param name="KOObservationDates"></param>
/// <param name="CouponBarrier"></param>
/// <returns></returns>
public static (string, string) GetAutocallKOObservationAndCoupon(string KOObservationDates, double CouponBarrier)
{
var KOObservationStr = KOObservationDates.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).ToList();
if (KOObservationStr.Count > 0)
{
var KoDates = KOObservationStr[0].Split(new char[] { ',' }).ToList();
var KoBarriers = KOObservationStr[1].Split(new char[] { ',' }).ToList();
var KoBarriers1 = KOObservationStr[1].Split(new char[] { ',' }).ToList();
var KoCoupon = new List<string>();
//当所有障碍价为空
if (KOObservationStr.Count == 2)
{
KoBarriers = null;
KoBarriers1 = null;
KoCoupon = KOObservationStr[1].Split(new char[] { ',' }).ToList();
}
else
{
KoCoupon = KOObservationStr[2].Split(new char[] { ',' }).ToList();
}
//票息观察处理 补充票息列
string[] CouponBarriers = new string[KoDates.Count];
for (int i = 0; i < KoDates.Count; i++)
{
CouponBarriers[i] = CouponBarrier.ToString();
}
var Couponinfo = string.Join(",", KoDates) + ";" + string.Join(",", CouponBarriers) + ";" + string.Join(",", KoCoupon);
//敲出观察处理 障碍价为空删除该观察日期
var KOinfo = "";
if (KoBarriers1 != null)
{
for (int i = 0; i < KoBarriers1.Count; i++)
{
if (string.IsNullOrWhiteSpace(KoBarriers1[i]))
{
KoDates.RemoveAt(i);
KoBarriers1.RemoveAt(i);
i--;
}
}
if (KoBarriers1.Any())
{
KOinfo = string.Join(",", KoDates) + ";" + string.Join(",", KoBarriers1);
}
}
return (Couponinfo, KOinfo);
}
else
{
return (string.Empty, string.Empty);
}
}
}
}