using CsvHelper; using System.Globalization; using YLErp.BLL; using YLErp.DBModels; using YLErp.Modules.EodModule; using YLErp.Modules.TradeRiskCalcModule; namespace YLErp.Forms { public partial class FormDebugTradeRisk : Form { public FormDebugTradeRisk() { InitializeComponent(); } private void btnSelectClient_Click(object sender, EventArgs e) { var form = new FormSelectClient { StartPosition = FormStartPosition.CenterScreen }; if (form.ShowDialog() == DialogResult.OK) { tbClientName.Text = form.SelectedClient; } } private void btnExecute_Click(object sender, EventArgs e) { labelExecuteState.Text = "执行状态:执行中"; labelExecuteState.Update(); var request = new TradeRiskCalcTestRequest { IsEodSettle = false, ValueDate = valuedateBLL.ValueDate, UseClosePrice = true, VolType = "对冲", TradeNumber = tbTradeNumber.Text.Trim(), ClientName = tbClientName.Text.Trim(), TradeType = tbTradeType.Text.Trim(), UnderlyingCode = tbUnderlyingCode.Text.Trim(), IncludeExchange = checkIncludeExchange.Checked, Skip_TradeType = tbSkipTradeTypes.Text }; new TradeRiskCalcTest().Execute(request); labelExecuteState.Text = "执行状态:执行完成"; } private void btnMultiExecute_Click(object sender, EventArgs e) { if (btnMultiExecute.Text == "停止执行") { btnMultiExecute.Text = "执行"; AppContext.SetSwitch("DisableTradeRiskCalcTaskRunner", true); } else { btnMultiExecute.Text = "停止执行"; int interval = 1000 * (int)numMeInterval.Value; Task.Run(() => { while (btnMultiExecute.Text == "停止执行") { try { TradeRiskCalcTaskRunner.Execute(new[] { "对冲" }); } catch (Exception ex) { LogFactory.GetLogger("执行实时风险测试").Error(ex); } Thread.Sleep(interval); } }); } } private void FormDebugTradeRisk_Load(object sender, EventArgs e) { accDateTimePicker1.Value = valuedateBLL.SystemDate.AccruedTotalPnlStartDate ?? valuedateBLL.ValueDate; accDateTimePicker2.Value = valuedateBLL.ValueDate; } private void btnAccDetail_Click(object sender, EventArgs e) { var startDate = accDateTimePicker1.Value; var endDate = accDateTimePicker2.Value; var list = new AccruedTotalPnlService(OptUserInfo.SystemUser).GetFinishedTradePnls(startDate, endDate, accIncludeHedge.Checked); var list2 = new AccruedTotalPnlService(OptUserInfo.SystemUser).GetAccruedStartPnls(startDate, true); if (!string.IsNullOrWhiteSpace(accTbUnderlyingCode.Text)) { list = list.Where(n => n.UnderlyingCode.StartsWith(accTbUnderlyingCode.Text.Trim(), StringComparison.OrdinalIgnoreCase)).ToArray(); list2 = list2.Where(n => n.UnderlyingCode.StartsWith(accTbUnderlyingCode.Text.Trim(), StringComparison.OrdinalIgnoreCase)).ToArray(); } string fullPath; var fileName = Guid.NewGuid().ToString("N") + ".csv"; using (var fs = InnerHelper.CreateTempFile(fileName, out fullPath)) using (var writer = new StreamWriter(fs, System.Text.Encoding.UTF8)) using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) { foreach (var li in list2) { li.Remark = "起算日前"; } csv.WriteHeader(); csv.NextRecord(); csv.WriteRecords(list); csv.WriteRecords(list2); } System.Diagnostics.Process.Start(fullPath); } private void btnAccSum_Click(object sender, EventArgs e) { var startDate = accDateTimePicker1.Value; var endDate = accDateTimePicker2.Value; var list = new AccruedTotalPnlService(OptUserInfo.SystemUser).GetFinishedTradePnls(startDate, endDate, accIncludeHedge.Checked); var list2 = new AccruedTotalPnlService(OptUserInfo.SystemUser).GetAccruedStartPnls(startDate, true); if (!string.IsNullOrWhiteSpace(accTbUnderlyingCode.Text)) { list = list.Where(n => n.UnderlyingCode.StartsWith(accTbUnderlyingCode.Text.Trim(), StringComparison.OrdinalIgnoreCase)).ToArray(); list2 = list2.Where(n => n.UnderlyingCode.StartsWith(accTbUnderlyingCode.Text.Trim(), StringComparison.OrdinalIgnoreCase)).ToArray(); } var accruedTotalPnLStartingDic = list2.AsEnumerable().GroupBy(n => n.UnderlyingCode).ToDictionary(g => g.Key, g => g.Sum(n => n.TotalPnl)); var sumQuery = from g in list.AsEnumerable().GroupBy(n => n.UnderlyingCode) select new { underlyingCode = g.Key, totalPnl = g.Sum(n => n.TotalPnl) - (accruedTotalPnLStartingDic.TryGetValue(g.Key, out var startingPnl) ? startingPnl : 0) }; var sums = sumQuery.ToArray(); string fullPath; var fileName = Guid.NewGuid().ToString("N") + ".csv"; using (var fs = InnerHelper.CreateTempFile(fileName, out fullPath)) using (var writer = new StreamWriter(fs)) using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) { csv.WriteRecords(sums); } System.Diagnostics.Process.Start(fullPath); } } }