Files
zszq-trs/Tools/YLTestTool/Modules/TradeRiskCalcModule/TradeRiskCalcTest.cs
T
2024-05-09 14:06:26 +08:00

161 lines
6.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using System.Diagnostics;
namespace YLErp.Modules.TradeRiskCalcModule
{
/// <summary>
///
/// </summary>
class TradeRiskCalcTest
{
public void Execute(TradeRiskCalcTestRequest request)
{
AppContext.SetSwitch("DisableTradeRiskCalcTaskRunner", true);
if (string.IsNullOrWhiteSpace(request.VolType))
{
request.VolType = "对冲";
}
var request2 = new TradeRiskCalcTestRequest2
{
TradeType = request.TradeType,
UnderlyingCodes = (request.UnderlyingCode ?? string.Empty).Split(new[] { ',', '' }, StringSplitOptions.RemoveEmptyEntries),
IncludeExchange = request.IncludeExchange
};
try
{
if (!string.IsNullOrWhiteSpace(request.TradeNumber))
{
var trad = DbContextFactory.GetYLDbContext().trade.FirstOrDefault(n => n.TradeNumber == request.TradeNumber);
if (trad == null)
{
throw new ServiceException("没有找到交易数据,交易编号:" + request.TradeNumber);
}
request2 = new TradeRiskCalcTestRequest2
{
TradeId = trad.id,
ClientId = trad.ClientId,
AssetBookId = trad.AssetId,
UnderlyingCodes = new[] { trad.UnderlyingCode },
TradeType = trad.TradeType
};
}
else
{
if (!string.IsNullOrWhiteSpace(request.ClientName))
{
var clientId = DataCacheProvider.GetClientDataSource().AsQueryable().Where(n => n.Name == request.ClientName)
.Select(n => (int?)n.id).FirstOrDefault() ?? 0;
if (clientId == 0)
{
Trace.WriteLine("[ERROR]未获取到ClientID:" + request.ClientName, "实时风险调试");
}
request2.ClientId = clientId;
}
}
var context = new TradeRiskCalcTestContext(request, request2);
var tradeDataSource = new TradeDataSource(request.ValueDate, request2) { Trace = context.Trace };
var service = new TradeRiskCalcService(context, request.Skip_TradeType);
var list = service.Calculate(tradeDataSource, null);
var riskReqModel = new TradingRiskReqModel
{
IncludeStock = true,
VolType = request.VolType,
AssetTypes = new[] { request2.TradeType },
BookIds = new List<int>() { request2.AssetBookId },
ClientIds = new List<int>() { request2.ClientId },
UnderlyingCodes = request2.UnderlyingCodes
};
riskReqModel.Normalize();
var result = TradingRiskReqService.GroupingResults(
new TradingRiskResult
{
ValueDate = context.ValueDate,
PreDate = context.PreSettleDate,
TradeRiskList = list,
}, riskReqModel);
context.Trace.WriteData(result, "执行结果数据");
context.Trace.WriteLine("结束!!!");
}
catch (Exception ex)
{
MessageBox.Show("发生错误:" + ex.ToString());
}
}
//public void CompareWithOldVersion()
//{
// var trace = new TraceWrap("新旧版本风险比较");
// var request = new TradeRiskCalcTestRequest
// {
// VolType = "持仓",
// ValueDate = BLL.valuedateBLL.ValueDate
// };
// var request2 = new TradeRiskCalcTestRequest2
// {
// //TradeId= 113565
// };
// var context = new TradeRiskCalcTestContext(request, request2);
// var tradeDataSource = new TradeDataSource(request.ValueDate, request2) { Trace = context.Trace };
// var service1 = new TradeRiskCalcServiceOld(context);
// var list1 = service1.Calculate(tradeDataSource);
// Trace.WriteLine("旧版本计算结果条数:" + list1.Count());
// tradeDataSource = new TradeDataSource(request.ValueDate, request2) { Trace = context.Trace };
// var service2 = new TradeRiskCalcService(context);
// var list2 = service2.Calculate(tradeDataSource);
// trace.WriteLine("新版本计算结果条数:" + list2.Count());
// var dic2 = list2.ToDictionary(n => n.TradeId);
// CompareLogic compareLogic = new CompareLogic
// {
// Config = new ComparisonConfig
// {
// DoublePrecision = 1e-8,
// MaxDifferences = 100
// }
// };
// var checkset = new HashSet<int>();
// foreach (var item1 in list1)
// {
// if (dic2.TryGetValue(item1.TradeId, out var item2))
// {
// ComparisonResult result = compareLogic.Compare(item1, item2);
// if (result.Differences.Any())
// {
// trace.WriteData(item1, result.DifferencesString);
// }
// else
// {
// trace.WriteData(item1, $"{item1.TradeType}--{item1.TradeNumber}--{item1.ExchangeOptionCode??item1.UnderlyingCode}--相同");
// }
// checkset.Add(item1.TradeId);
// }
// else
// {
// trace.WriteData(item1, "未找到新版本数据");
// }
// }
// foreach (var item2 in list2)
// {
// if (checkset.Add(item2.TradeId))
// {
// trace.WriteData(item2, "未找到旧版本数据");
// }
// }
//}
}
}