private void AbnRecon(DateTime reportdate, List<CpTrade> trades) { var cplist = new List<string> {"LEK", "CQG", "FASTMATCH", "CURRENEX","EXANTE", ""}; var mltytrades = MultyTradesCheckBox.Checked; var boTradeslist = CreateIdForBoTrades(getTradesFromDB(reportdate, cplist, true)); var numberBoTrades = boTradeslist.Count; var cpmapping = getBOtoABNMapping(); var symbolMap = getSymbolMap(); var abnTradeslist = CreateIdForAbnTrades(getOnlyTrades(trades)); var recon = new List<Reconcilation>(); var db = new EXANTE_Entities(); foreach (var cpTrade in abnTradeslist) { List<Ctrade> ctrade; if (boTradeslist.TryGetValue(cpTrade.Id, out ctrade)) { cpTrade.BOTradeNumber = ctrade[0].tradeNumber.ToString(); cpTrade.BOcp = ctrade[0].cp_id; cpTrade.Comment = ctrade[0].BOtradeTimestamp.Value.ToShortDateString(); ctrade[0].RecStatus = true; db.CpTrades.Attach(cpTrade); db.Entry(cpTrade).State = EntityState.Modified; db.Ctrades.Attach(ctrade[0]); db.Entry(ctrade[0]).State = EntityState.Modified; ctrade.RemoveAt(0); if (ctrade.Count == 0) { boTradeslist.Remove(cpTrade.Id); } recon.Add(new Reconcilation { CpTrade_id = cpTrade.FullId, Ctrade_id = Convert.ToInt64(cpTrade.BOTradeNumber), Timestamp = DateTime.UtcNow, username = "******", valid = 1 }); } else { var t = 1; // CheckMultitrades(cpTrade,boTradeslist.Values.SelectMany(x=>x).ToList()); } } db.SaveChanges(); /* List<Ctrade> bolist = null; foreach (KeyValuePair<string, List<Ctrade>> keyValuePair in boTradeslist) { if ((keyValuePair.Value[0].RecStatus == false)&&(keyValuePair.Value[0].symbol_id.Contains("%/%.%.%20%"))) { var t = 1; } bolist.Add(keyValuePair.Value[0]); }*/ /* foreach (CpTrade cpTrade in abnTradeslist) { db.CpTrades.Attach(cpTrade); db.Entry(cpTrade).State = EntityState.Modified; }*/ foreach (Reconcilation reconcilation in recon) { db.Reconcilations.Add(reconcilation); } db.SaveChanges(); }
private void FORTSReconciliation(string cp, string identify) { DateTime reportdate = ABNDate.Value; //todo Get report date from xml Processing date TradesParserStatus.Text = "Processing"; var db = new EXANTE_Entities(_currentConnection); if (!noparsingCheckbox.Checked) { List<InitialTrade> lInitTrades = OpenParsing(cp, identify); List<CpTrade> lCptrades = OpenConverting(lInitTrades, cp); foreach (CpTrade cptrade in lCptrades) { cptrade.ReportDate = reportdate.Date; db.CpTrades.Add(cptrade); } SaveDBChanges(ref db); } else { DateTime nextdate = reportdate.AddDays(1); Dictionary<string, Map> symbolmap = getMapping(cp); //var symbolmap = getMap("OPEN"); IQueryable<CpTrade> cptradefromDb = from cptrade in db.CpTrades where cptrade.valid == 1 && (cptrade.BrokerId == cp) && // || cptrade.BrokerId == "MOEX-SPECTRA") && cptrade.ReportDate >= reportdate.Date && cptrade.ReportDate < (nextdate.Date) && cptrade.BOTradeNumber == null select cptrade; IQueryable<Contract> contractrow = from ct in db.Contracts where ct.valid == 1 select ct; Dictionary<string, Contract> contractdetails = contractrow.ToDictionary(k => k.id, k => k); foreach (CpTrade cpTrade in cptradefromDb) { if (cpTrade.Comment != null && cpTrade.Comment.Contains("REPO")) { int type = 1; } if (cpTrade.BOSymbol == null) { if (symbolmap.ContainsKey(cpTrade.Symbol + cpTrade.Type)) { Map map = symbolmap[cpTrade.Symbol + cpTrade.Type]; cpTrade.BOSymbol = map.BOSymbol; cpTrade.Price = cpTrade.Price*map.MtyPrice; cpTrade.Qty = cpTrade.Qty*map.MtyVolume; cpTrade.value = cpTrade.value*map.Leverage; if (contractdetails.ContainsKey(map.BOSymbol)) { cpTrade.ValueDate = contractdetails[map.BOSymbol].ValueDate; } else { cpTrade.ValueDate = map.ValueDate; } db.CpTrades.Attach(cpTrade); db.Entry(cpTrade).State = (EntityState)System.Data.Entity.EntityState.Modified; } else { string symbol = cpTrade.Symbol; if (symbol.Contains("A ") && (cpTrade.Type != "REPO")) //indetify option { cpTrade.Type = "OP"; string keysymbol = symbol.Substring(0, symbol.IndexOf("-")) + "OP"; Map map; if (symbolmap.TryGetValue(keysymbol, out map)) { int startindex = symbol.IndexOf("M", symbol.IndexOf("-")); int endindex = symbol.IndexOf(" ", startindex); cpTrade.ValueDate = DateTime.ParseExact( symbol.Substring(startindex + 1, endindex - 2 - (startindex + 1)), "ddMMyy", CultureInfo.CurrentCulture); int strikeindex = symbol.IndexOf("A "); string bosymbol = map.BOSymbol + "."; if (map.Round == 1) { bosymbol = bosymbol + cpTrade.ValueDate.Value.Day.ToString(); } bosymbol = bosymbol + getLetterOfMonth(cpTrade.ValueDate.Value.Month) + cpTrade.ValueDate.Value.Year.ToString() + "."; cpTrade.BOSymbol = bosymbol + symbol.Substring(strikeindex - 1, 1) + symbol.Substring(strikeindex + 2); } } } } } SaveDBChanges(ref db); } RecProcess(reportdate, cp); TradesParserStatus.Text = "Done"; Console.WriteLine(""); // <-- For debugging use. */ }
private void RecProcess(DateTime reportdate, string ccp) { DateTime TimeStart = DateTime.Now; LogTextBox.AppendText("\r\n" + TimeStart + ": " + "start " + ccp + " reconciliation"); var db = new EXANTE_Entities(_currentConnection); Dictionary<string, Map> symbolmap = getMap(ccp); DateTime nextdate = reportdate.AddDays(1); IQueryable<CpTrade> cptradefromDb = from cptrade in db.CpTrades where cptrade.valid == 1 && cptrade.BrokerId == ccp && cptrade.ReportDate >= reportdate.Date && cptrade.ReportDate < (nextdate.Date) && cptrade.BOTradeNumber == null select cptrade; if (ccp == "ABN") cptradefromDb = cptradefromDb.Where(o => o.TypeOfTrade == "01"); //.Contains(o.StatusCode)) if (ccp == "Mac") cptradefromDb = cptradefromDb.Where(o => o.TypeOfTrade == "A"); if (ccp == "CFH") cptradefromDb = cptradefromDb.Where(o => o.TypeOfTrade == "OnlineTrade"); //var filteredOrders = orders.Order.Where(o => allowedStatus.Contains(o.StatusCode)); List<CpTrade> cptradelist = cptradefromDb.ToList(); foreach (CpTrade cpTrade in cptradelist) { if (cpTrade.BOSymbol == null) { Map symbolvalue; string key = cpTrade.Symbol + cpTrade.Type; if (cpTrade.Type == "FU") { if (cpTrade.ValueDate != null) key = key + cpTrade.ValueDate.Value.ToShortDateString(); } if (symbolmap.TryGetValue(key, out symbolvalue)) { cpTrade.BOSymbol = symbolvalue.BOSymbol; cpTrade.Qty = cpTrade.Qty*symbolvalue.MtyVolume; cpTrade.Price = cpTrade.Price*symbolvalue.MtyPrice; } db.CpTrades.Attach(cpTrade); db.Entry(cpTrade).State = (EntityState)System.Data.Entity.EntityState.Modified; } } SaveDBChanges(ref db); db.Dispose(); DateTime TimeStartReconciliation = DateTime.Now; AbnRecon(reportdate, cptradelist, ccp); DateTime TimeEndReconciliation = DateTime.Now; LogTextBox.AppendText("\r\n" + TimeEndReconciliation.ToLongTimeString() + ": " + "Reconciliation completed. Time:" + (TimeStartReconciliation - TimeEndReconciliation).ToString() + "s"); }
private void button10_Click(object sender, EventArgs e) { var db = new EXANTE_Entities(_currentConnection); var reportdate = new DateTime(2012, 05, 14); var prevdate = new DateTime(2012, 05, 04); DateTime TimeStart = DateTime.Now; List<Ftbo> ftboitems = (from ct in db.Ftboes where ct.botimestamp >= prevdate && ct.botimestamp <= reportdate && (ct.symbolId == "" || ct.symbolId == null) && ct.tradeNumber != null select ct).ToList(); //ToDictionary(k => (k.tradeNumber.ToString()+k.gatewayId), k => k); int index = 0; Dictionary<string, string> ctradeitems = (from ct in db.Ctrades where ct.BOtradeTimestamp <= reportdate.Date && ct.BOtradeTimestamp >= prevdate.Date select ct).ToDictionary(k => (k.tradeNumber.ToString() + k.gatewayId), k => k.symbol_id); foreach (Ftbo ftbo in ftboitems) { string symbolid; if (ctradeitems.TryGetValue(ftbo.tradeNumber.ToString() + ftbo.gatewayId, out symbolid)) { ftbo.symbolId = symbolid; db.Ftboes.Attach(ftbo); db.Entry(ftbo).State = (EntityState)System.Data.Entity.EntityState.Modified; index++; } else { LogTextBox.AppendText("\r\n" + "Didn't find trade for this id:" + ftbo.id + " " + ftbo.tradeNumber); } } db.SaveChanges(); // var n = queryable.Count(); // var m = queryable2.Count(); DateTime TimeFutureParsing = DateTime.Now; db.Dispose(); LogTextBox.AppendText("\r\n" + TimeFutureParsing.ToLongTimeString() + " Updating symbol completed for " + index + " items. Time: " + (TimeFutureParsing - TimeStart).ToString() + "s"); }
private void cFHReconciliationToolStripMenuItem_Click(object sender, EventArgs e) { DateTime reportdate = ABNDate.Value; //todo Get report date from xml Processing date var db = new EXANTE_Entities(_currentConnection); if (!noparsingCheckbox.Checked) { List<InitialTrade> lInitTrades = CFHParsing(); List<CpTrade> lCptrades = OpenConverting(lInitTrades, "CFH"); foreach (CpTrade cptrade in lCptrades) { db.CpTrades.Add(cptrade); } SaveDBChanges(ref db); } else { DateTime nextdate = reportdate.AddDays(1); Dictionary<string, Map> symbolmap = getMapping("CFH"); IQueryable<CpTrade> cptradefromDb = from cptrade in db.CpTrades where cptrade.valid == 1 && cptrade.BrokerId == "CFH" && cptrade.ReportDate >= reportdate.Date && cptrade.ReportDate < (nextdate.Date) && cptrade.BOTradeNumber == null select cptrade; IQueryable<Contract> contractrow = from ct in db.Contracts where ct.valid == 1 select ct; Dictionary<string, Contract> contractdetails = contractrow.ToDictionary(k => k.id, k => k); foreach (CpTrade cpTrade in cptradefromDb) { if (cpTrade.BOSymbol == null && symbolmap.ContainsKey(cpTrade.Symbol)) { Map map = symbolmap[cpTrade.Symbol]; cpTrade.BOSymbol = map.BOSymbol; cpTrade.Price = cpTrade.Price*map.MtyPrice; cpTrade.Qty = cpTrade.Qty*map.MtyVolume; cpTrade.value = cpTrade.value*map.Leverage; if (contractdetails.ContainsKey(map.BOSymbol)) { cpTrade.ValueDate = contractdetails[map.BOSymbol].ValueDate; } else { cpTrade.ValueDate = map.ValueDate; } db.CpTrades.Attach(cpTrade); db.Entry(cpTrade).State = (EntityState)System.Data.Entity.EntityState.Modified; } } SaveDBChanges(ref db); } RecProcess(reportdate, "CFH"); }
private static void UpdateRecTrades(CpTrade cpTrade, List<Ctrade> ctrade, EXANTE_Entities db, List<Reconcilation> recon) { long? botradenumber = ctrade[0].tradeNumber; if (cpTrade.BOTradeNumber == null) { cpTrade.BOTradeNumber = botradenumber.ToString(); } else { cpTrade.BOTradeNumber = cpTrade.BOTradeNumber + ";" + botradenumber.ToString(); } cpTrade.BOcp = ctrade[0].cp_id; cpTrade.BOSymbol = ctrade[0].symbol_id; cpTrade.Comment = ctrade[0].BOtradeTimestamp.Value.ToShortDateString(); ctrade[0].RecStatus = true; db.CpTrades.Attach(cpTrade); db.Entry(cpTrade).State = (EntityState)System.Data.Entity.EntityState.Modified; db.Ctrades.Attach(ctrade[0]); db.Entry(ctrade[0]).State = (EntityState)System.Data.Entity.EntityState.Modified; recon.Add(new Reconcilation { CpFull_id = cpTrade.FullId, BOTradenumber = botradenumber, Timestamp = DateTime.UtcNow, username = "******", valid = 1 }); SaveDBChanges(ref db); }
private void updateOpenToolStripMenuItem_Click(object sender, EventArgs e) { DialogResult result = openFileDialog2.ShowDialog(); var lInitTrades = new List<CpTrade>(); if (result == DialogResult.OK) // Test result. { DateTime TimeStart = DateTime.Now; LogTextBox.AppendText("\r\n" + TimeStart.ToLongTimeString() + ": " + "start OPEN trades uploading"); var db = new EXANTE_Entities(_currentConnection); Dictionary<string, ColumnMapping> cMapping = (from ct in db.ColumnMappings where ct.Brocker == "OPEN" && ct.FileType == "EXCEL" select ct).ToDictionary(k => k.Type, k => k); var ObjExcel = new Application(); //Открываем книгу. Workbook ObjWorkBook = ObjExcel.Workbooks.Open(openFileDialog2.FileName, 0, false, 5, "", "", false, XlPlatform .xlWindows, "", true, false, 0, true, false, false); //Выбираем таблицу(лист). Worksheet ObjWorkSheet; ObjWorkSheet = (Worksheet) ObjWorkBook.Sheets[cMapping["ST"].cTabName]; Range xlRange = ObjWorkSheet.UsedRange; var tradescounter = new Dictionary<DateTime, int>(); int? i = cMapping["ST"].cLineStart; int n = xlRange.Rows.Count; int numberofchanges = 0; while (i <= n) { if (xlRange.Cells[i, cMapping["ST"].cTradeDate].value2 != null) { if ((xlRange.Cells[i, cMapping["ST"].cFee2].value2 != null) || (xlRange.Cells[i, cMapping["ST"].cFee3].value2 != null)) { string currExchorder = xlRange.Cells[i, cMapping["ST"].cExchangeOrderId].value2; CpTrade currcptrade = (from ct in db.CpTrades where ct.BrokerId == "OPEN" && ct.exchangeOrderId.Contains(currExchorder) select ct).FirstOrDefault(); if (currcptrade != null) { currcptrade.Fee2 = cMapping["ST"].cFee2 != null ? xlRange.Cells[i, cMapping["ST"].cFee2].value2 : null; currcptrade.Fee3 = cMapping["ST"].cFee3 != null ? xlRange.Cells[i, cMapping["ST"].cFee3].value2 : null; db.CpTrades.Attach(currcptrade); db.Entry(currcptrade).State = (EntityState) System.Data.Entity.EntityState.Modified; } SaveDBChanges(ref db); numberofchanges++; } } i++; } db.Dispose(); LogTextBox.AppendText("\r\n Updated trades " + numberofchanges.ToString()); //*** } }
private void UpdateMacSymbol(DateTime reportdate, string cp) { var db = new EXANTE_Entities(_currentConnection); IQueryable<CpTrade> cptradefromDb = from cptrade in db.CpTrades where cptrade.valid == 1 && cptrade.BrokerId == "Mac" && cptrade.ReportDate >= reportdate.Date && cptrade.ReportDate <= (reportdate.Date) && cptrade.BOSymbol == null select cptrade; List<CpTrade> cptradelist = cptradefromDb.ToList(); /* var symbolmap = getMapping("Mac"); var contractrow = from ct in db.Contracts where ct.valid == 1 select ct; var contractdetails = contractrow.ToDictionary(k => k.id, k => k);*/ Dictionary<string, Map> symbolmap = GetMapSymbol(cp, db); foreach (CpTrade cpTrade in cptradelist) { Map symbolvalue; if (symbolmap.TryGetValue(cpTrade.Symbol + cpTrade.Type, out symbolvalue)) { string key = symbolvalue.BOSymbol + "." + getLetterOfMonth(cpTrade.ValueDate.Value.Month) + cpTrade.ValueDate.Value.Year; Contract mapContract; cpTrade.Price = cpTrade.Price*symbolvalue.MtyPrice; cpTrade.value = -cpTrade.Price*cpTrade.Qty*symbolvalue.Leverage; cpTrade.Qty = cpTrade.Qty*symbolvalue.MtyVolume; cpTrade.BOSymbol = key; /* if (contractdetails.TryGetValue(key, out mapContract)) { cpTrade.ValueDate = mapContract.ValueDate; cpTrade.BOSymbol = key; } else { LogTextBox.AppendText("\r\n" + "Mac: No Map in Contracts for " + key); }*/ } db.CpTrades.Attach(cpTrade); db.Entry(cpTrade).State = (EntityState)System.Data.Entity.EntityState.Modified; SaveDBChanges(ref db); } }
private void ABNReconButtonClick(object sender, EventArgs e) { var reportdate = ABNDate.Value;//todo Get report date from xml Processing date var testexample = new EXANTE_Entities(); var symbolmap = getMap("ABN"); if (noparsingCheckbox.Checked) { var nextdate = reportdate.AddDays(1); var cptradefromDb = from cptrade in testexample.CpTrades where cptrade.TypeOfTrade == "01" && cptrade.valid == 1 && cptrade.BrokerId=="ABN" && cptrade.ReportDate >= reportdate.Date && cptrade.ReportDate < (nextdate.Date) && cptrade.BOTradeNumber == null select cptrade; var cptradelist = cptradefromDb.ToList(); foreach (CpTrade cpTrade in cptradelist) { if (cpTrade.BOSymbol == null) { Map symbolvalue; var key = cpTrade.Symbol + cpTrade.Type; if (cpTrade.Type == "FU") key = key + cpTrade.ValueDate.Value.ToShortDateString(); if (symbolmap.TryGetValue(key, out symbolvalue)) { cpTrade.BOSymbol = symbolvalue.BOSymbol; } testexample.CpTrades.Attach(cpTrade); testexample.Entry(cpTrade).State = EntityState.Modified; /* if (cpTrade.Type == "FW") { cpTrade.BOSymbol = cpTrade.BOSymbol + cpTrade.ValueDate.Value.ToShortDateString(); }*/ /* var tt = "GBP/USD.E2.23M2014"; var p=tt.IndexOf('.',tt.IndexOf('.')+1);// > -1)*/ } } testexample.SaveChanges(); AbnRecon(reportdate, cptradelist); } else { var allfromfile = new List<CpTrade>(); var futtrades = new List<CpTrade>(); var result = openFileDialog2.ShowDialog(); if (result == DialogResult.OK) { if (CliffCheckBox.Checked) { var cliffdict = LoadCliff(openFileDialog2.FileName, reportdate); List<string> rowlist; if (cliffdict.TryGetValue("610", out rowlist)) updateBalance(rowlist, reportdate); if (cliffdict.TryGetValue("310", out rowlist))allfromfile = ExtractTradesFromCliff(rowlist, symbolmap); if (cliffdict.TryGetValue("410", out rowlist))allfromfile.AddRange(ExtractTradesFromCliff(rowlist, symbolmap)); if (cliffdict.TryGetValue("210", out rowlist)) allfromfile.AddRange(ExtractOptionTradesFromCliff(rowlist, symbolmap)); } else { allfromfile = ExtractTradesFromXml(symbolmap); } foreach (CpTrade tradeIndex in allfromfile) { testexample.CpTrades.Add(tradeIndex); } testexample.SaveChanges(); allfromfile = allfromfile.Where(s => s.TypeOfTrade == "01").ToList(); AbnRecon(reportdate, allfromfile); } } }
private static void UpdateRecTrades(CpTrade cpTrade, List<Ctrade> ctrade, EXANTE_Entities db, Dictionary<string, List<Ctrade>> boTradeslist, List<Reconcilation> recon) { var botradenumber = ctrade[0].tradeNumber; if (cpTrade.BOTradeNumber == null) { cpTrade.BOTradeNumber = botradenumber.ToString(); } else { cpTrade.BOTradeNumber = cpTrade.BOTradeNumber + ";" + botradenumber.ToString(); } cpTrade.BOcp = ctrade[0].cp_id; cpTrade.BOSymbol = ctrade[0].symbol_id; cpTrade.Comment = ctrade[0].BOtradeTimestamp.Value.ToShortDateString(); ctrade[0].RecStatus = true; db.CpTrades.Attach(cpTrade); db.Entry(cpTrade).State = EntityState.Modified; db.Ctrades.Attach(ctrade[0]); db.Entry(ctrade[0]).State = EntityState.Modified; recon.Add(new Reconcilation { CpTrade_id = cpTrade.FullId, Ctrade_id = botradenumber, Timestamp = DateTime.UtcNow, username = "******", valid = 1 }); }