153 lines
6.3 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|