Files
zszq-trs/YLErpUnitTest/Modules/MarginModule/MarginCalculation/MarginCalculation.cs
T
2024-05-09 14:06:26 +08:00

210 lines
12 KiB
C#

//using System;
//using System.Collections.Generic;
//using System.Linq;
//using YLErp.Configuration;
//using YLErp.DBModels;
//using YLErp.Model;
//namespace YLErp.BLL.MarginCalculationBak
//{
// /// <summary>
// ///
// /// </summary>
// public static class MarginDefault
// {
// /// <summary>
// /// 计算日终保证金
// /// </summary>
// /// <param name="userId"></param>
// /// <param name="userName"></param>
// /// <param name="tradeList"></param>
// /// <param name="settleDate"></param>
// /// <param name="priceDict">如需要根据不同客户配置选取价格,应传null</param>
// /// <param name="hasOptionInfo"></param>
// /// <param name="isEodSettle"></param>
// /// <param name="forSingleTrade"></param>
// /// <param name="volType"></param>
// /// <param name="forOtherSide"></param>
// /// <returns></returns>
// public static List<trade_span> RunMarginCalculation(int userId, string userName, List<trade> tradeList, DateTime settleDate, Dictionary<int, double> priceDict, bool hasOptionInfo = false, bool isEodSettle = false, bool forSingleTrade = true, string volType = "交易", bool forOtherSide = false)
// {
// switch (PS.Config.Company)
// {
// case CompanyEnum.国泰君安:
// case CompanyEnum.上期资本:
// case CompanyEnum.中财资本:
// return GTJAMarginCalculation.Instance.RunMarginCalculation(userId, userName, tradeList, settleDate, priceDict, hasOptionInfo, isEodSettle, forSingleTrade, volType, forOtherSide);
// case CompanyEnum.光大光子:
// return GDGZMarginCalculation.Instance.RunMarginCalculation(userId, userName, tradeList, settleDate, priceDict, hasOptionInfo, isEodSettle, forSingleTrade, volType, forOtherSide);
// case CompanyEnum.渤海:
// case CompanyEnum.安粮:
// return BHRSMarginCalculation.Instance.RunMarginCalculation(userId, userName, tradeList, settleDate, priceDict, hasOptionInfo, isEodSettle, forSingleTrade, volType, forOtherSide);
// case CompanyEnum.申万:
// return SYWGMarginCalculation.Instance.RunMarginCalculation(userId, userName, tradeList, settleDate, priceDict, hasOptionInfo, isEodSettle, forSingleTrade, volType, forOtherSide);
// case CompanyEnum.格林大华:
// return UniversalMarginCalculation.Instance.RunMarginCalculation(userId, userName, tradeList, settleDate, priceDict, hasOptionInfo, isEodSettle, forSingleTrade, volType, forOtherSide);
// case CompanyEnum.方顿:
// return FDMarginCalculation.Instance.RunMarginCalculation(userId, userName, tradeList, settleDate, priceDict, hasOptionInfo, isEodSettle, forSingleTrade, volType, forOtherSide);
// case CompanyEnum.茂川资本:
// return MaoChuanMarginCalculation.Instance.RunMarginCalculation(userId, userName, tradeList, settleDate, priceDict, hasOptionInfo, isEodSettle, forSingleTrade, volType, forOtherSide);
// case CompanyEnum.宏源:
// return HongYuanMarginCalculation.Instance.RunMarginCalculation(userId, userName, tradeList, settleDate, priceDict, hasOptionInfo, isEodSettle, forSingleTrade, volType, forOtherSide);
// case CompanyEnum.伴兴:
// return BXMarginCalculation.Instance.RunMarginCalculation(userId, userName, tradeList, settleDate, priceDict, hasOptionInfo, isEodSettle, forSingleTrade, volType, forOtherSide);
// case CompanyEnum.海通:
// return HaiTongMarginCalculation.Instance.RunMarginCalculation(userId, userName, tradeList, settleDate, priceDict, hasOptionInfo, isEodSettle, forSingleTrade, volType, forOtherSide);
// case CompanyEnum.瑞达:
// return RDMarginCalculation.Instance.RunMarginCalculation(userId, userName, tradeList, settleDate, priceDict, hasOptionInfo, isEodSettle, forSingleTrade, volType, forOtherSide);
// default:
// return GTJAMarginCalculation.Instance.RunMarginCalculation(userId, userName, tradeList, settleDate, priceDict, hasOptionInfo, isEodSettle, forSingleTrade, volType, forOtherSide);
// }
// }
// public static bool CalcClientMargin(int userId, string userName, DateTime settleDate, List<trade_span> tradeSpans, List<trade_span> tradeSpansOtherSide, int SpanType = 0, List<int> RefreshClientIds = null, Dictionary<int, double> clientAdditionalMarginDic = null)
// {
// switch (PS.Config.Company)
// {
// case CompanyEnum.国泰君安:
// return GTJAMarginCalculation.Instance.CalcClientMargin(userId, userName, settleDate, tradeSpans, tradeSpansOtherSide, SpanType, RefreshClientIds, false);
// case CompanyEnum.光大光子:
// return GDGZMarginCalculation.Instance.CalcClientMargin(userId, userName, settleDate, tradeSpans, tradeSpansOtherSide, SpanType, RefreshClientIds, false);
// case CompanyEnum.渤海:
// return BHRSMarginCalculation.Instance.CalcClientMargin(userId, userName, settleDate, tradeSpans, tradeSpansOtherSide, SpanType, RefreshClientIds, false);
// case CompanyEnum.安粮:
// return BHRSMarginCalculation.Instance.CalcClientMargin(userId, userName, settleDate, tradeSpans, tradeSpansOtherSide, SpanType, RefreshClientIds, false, clientAdditionalMarginDic);
// case CompanyEnum.申万:
// return SYWGMarginCalculation.Instance.CalcClientMargin(userId, userName, settleDate, tradeSpans, tradeSpansOtherSide, SpanType, RefreshClientIds, !PS.Config.ErpElement.TwoSideMargin);
// case CompanyEnum.格林大华:
// return UniversalMarginCalculation.Instance.CalcClientMargin(userId, userName, settleDate, tradeSpans, tradeSpansOtherSide, SpanType, RefreshClientIds, !PS.Config.ErpElement.TwoSideMargin);
// case CompanyEnum.伴兴:
// return BXMarginCalculation.Instance.CalcClientMargin(userId, userName, settleDate, tradeSpans, tradeSpansOtherSide, SpanType, RefreshClientIds, false);
// case CompanyEnum.海通:
// return HaiTongMarginCalculation.Instance.CalcClientMargin(userId, userName, settleDate, tradeSpans, tradeSpansOtherSide, SpanType, RefreshClientIds, false);
// case CompanyEnum.瑞达:
// return RDMarginCalculation.Instance.CalcClientMargin(userId, userName, settleDate, tradeSpans, tradeSpansOtherSide, SpanType, RefreshClientIds, false);
// default:
// return GTJAMarginCalculation.Instance.CalcClientMargin(userId, userName, settleDate, tradeSpans, tradeSpansOtherSide, SpanType, RefreshClientIds, false);
// }
// }
// public static bool isMarginCalcNeedSpecial()
// {
// switch (YLErp.PS.Config.Company)
// {
// case CompanyEnum.渤海:
// case CompanyEnum.安粮:
// return BHRSMarginCalculation.Instance.MarginCalcNeedSpecial;
// case CompanyEnum.国泰君安:
// case CompanyEnum.申万:
// case CompanyEnum.格林大华:
// default:
// return SYWGMarginCalculation.Instance.MarginCalcNeedSpecial;
// }
// }
// public static double? GetInitialMarginRatio(trade trade)
// {
// switch (PS.Config.Company)
// {
// case CompanyEnum.方顿:
// return FDMarginCalculation.Instance.GetInitialMarginRatio(trade);
// default:
// return 0;
// }
// }
// public static double? GetPositionMarginRatio(trade trade)
// {
// switch (PS.Config.Company)
// {
// case CompanyEnum.方顿:
// return FDMarginCalculation.Instance.GetPositionMarginRatio(trade);
// default:
// return 0;
// }
// }
// public static double GetInitialMargin(trade trade, bool hasOptionInfo = false)
// {
// if (trade is null)
// {
// return 0;
// }
// switch (PS.Config.Company)
// {
// case CompanyEnum.方顿:
// return FDMarginCalculation.Instance.GetInitialMargin(trade);
// case CompanyEnum.光大光子:
// return GDGZMarginCalculation.Instance.GetInitialMargin(trade);
// default:
// return GetTradeMargin(trade, (trade.SpotPrice ?? 0), true, hasOptionInfo);
// }
// }
// /// <summary>
// /// isInitialMargin为true: 为初始保证金
// /// isInitialMargin为false: 为实时保证金
// /// </summary>
// public static double GetTradeMargin(trade trade, double price, bool isInitialMargin = false, bool hasOptionInfo = false)
// {
// if (trade.TradeType == "结构化交易")
// {
// var option = StructureOption_Code.StructureOptions.FirstOrDefault(o => o.Name == trade.StructureType || o.CnName == trade.StructureType);
// //自由组合时不在变更StructureType字段值,保持原有结构化交易的内容;
// if (option != null)
// { trade.StructureType = option.CnName; }
// }
// double? tempInitialMargin = null;
// if (!isInitialMargin && trade.CalcFlag == 1)
// {
// tempInitialMargin = trade.InitialMargin;
// trade.InitialMargin = null;
// }
// try
// {
// switch (PS.Config.Company)
// {
// case CompanyEnum.国泰君安:
// case CompanyEnum.上期资本:
// case CompanyEnum.光大光子:
// return GTJAMarginCalculation.Instance.GetTradeMargin(trade, price, isInitialMargin, hasOptionInfo);
// case CompanyEnum.渤海:
// return BHRSMarginCalculation.Instance.GetTradeMargin(trade, price, isInitialMargin, hasOptionInfo);
// case CompanyEnum.安粮:
// return BHRSMarginCalculation.Instance.GetTradeMargin(trade, price, isInitialMargin, hasOptionInfo);
// case CompanyEnum.申万:
// return SYWGMarginCalculation.Instance.GetTradeMargin(trade, price, isInitialMargin, hasOptionInfo);
// case CompanyEnum.格林大华:
// return UniversalMarginCalculation.Instance.GetTradeMargin(trade, price, isInitialMargin, hasOptionInfo);
// case CompanyEnum.茂川资本:
// return MaoChuanMarginCalculation.Instance.GetTradeMargin(trade, price, isInitialMargin, hasOptionInfo);
// case CompanyEnum.宏源:
// return HongYuanMarginCalculation.Instance.GetTradeMargin(trade, price, isInitialMargin, hasOptionInfo);
// case CompanyEnum.伴兴:
// return BXMarginCalculation.Instance.GetTradeMargin(trade, price, isInitialMargin, hasOptionInfo);
// case CompanyEnum.海通:
// return HaiTongMarginCalculation.Instance.GetTradeMargin(trade, price, isInitialMargin, hasOptionInfo);
// case CompanyEnum.瑞达:
// return RDMarginCalculation.Instance.GetTradeMargin(trade, price, isInitialMargin, hasOptionInfo);
// default:
// return GTJAMarginCalculation.Instance.GetTradeMargin(trade, price, isInitialMargin, hasOptionInfo);
// }
// }
// finally
// {
// if (isInitialMargin && trade.CalcFlag == 1 && trade.InitialMargin == null)
// {
// trade.InitialMargin = tempInitialMargin;
// }
// }
// }
// }
// public class MarginResult
// {
// public trade trade;
// public double Margin;
// }
//}