Files
zszq-trs/Tools/YLTestTool/Forms/FormDebugTradeRisk.cs
2024-05-09 14:06:26 +08:00

153 lines
6.3 KiB
C#

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<eod_trade_position_hedgevol>(OptUserInfo.SystemUser).GetFinishedTradePnls(startDate, endDate, accIncludeHedge.Checked);
var list2 = new AccruedTotalPnlService<eod_trade_position_hedgevol>(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<EodPnlStaticsDto>();
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<eod_trade_position_hedgevol>(OptUserInfo.SystemUser).GetFinishedTradePnls(startDate, endDate, accIncludeHedge.Checked);
var list2 = new AccruedTotalPnlService<eod_trade_position_hedgevol>(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);
}
}
}