Exemple #1
0
        private void DoMakeTradeHistoryInDB(BackgroundWorkerTask taskParam)
        {
            var taskPtr     = (HistoryMakerTaskParam)taskParam.DataParam;
            var totalCount  = taskPtr.portfolioDoc.DocumentElement.ChildNodes.Count;
            var currentNode = 0;

            foreach (XmlElement node in taskPtr.portfolioDoc.DocumentElement.ChildNodes)
            {
                if (workerQuote.CancellationPending)
                {
                    break;
                }
                Logger.InfoFormat("Старт формирования истории по счету - {0} из {1}", currentNode + 1, totalCount);
                taskPtr.historyMaker.MakeHistory(node);
                currentNode++;
                workerQuote.ReportProgress(100 * currentNode / totalCount);
            }
            workerQuote.ReportProgress(100);

            if (taskPtr.historyMaker.testOnly)
            {
                using (var sw = new StreamWriter(ExecutablePath.ExecPath + "\\performance_test.txt", false, Encoding.UTF8))
                {
                    sw.WriteLine(AccountPerformance.MakeTableHeader());
                    taskPtr.historyMaker.performance.ForEach(sw.WriteLine);
                }
            }
        }
Exemple #2
0
        private void MakeOrTestStrategies(bool makeNotTest)
        {
            if (workerQuote.IsBusy)
            {
                workerQuote.CancelAsync();
                return;
            }

            if (!File.Exists(tbFarmSetsPath.Text))
            {
                return;
            }

            var doc = new XmlDocument();

            using (var sr = new StreamReader(tbFarmSetsPath.Text, Encoding.UTF8))
                doc.Load(sr);
            if (doc.DocumentElement == null)
            {
                return;
            }

            if (string.IsNullOrEmpty(richTextBoxAccountIds.Text))
            {
                return;
            }
            var accIds = richTextBoxAccountIds.Text.ToIntArrayUniform();

            if (accIds.Length == 0)
            {
                return;
            }

            var quoteFolder = tbDestinationQuoteFolder.Text;

            if (string.IsNullOrEmpty(quoteFolder))
            {
                return;
            }
            if (!Directory.Exists(quoteFolder))
            {
                return;
            }

            var probWithdrawOnLossProfit = tbWdthProbOnLoss.Text.ToIntArrayUniform();
            var histMaker = new TradeHistoryMaker(tbSkipLossProb.Text.ToInt(), tbWithdrawProb.Text.ToInt(),
                                                  probWithdrawOnLossProfit[0], probWithdrawOnLossProfit[1],
                                                  !makeNotTest, tbStartTestDepo.Text.ToInt(),
                                                  dpModelStartegiesStart.Value, dpModelStrategiesEnd.Value);

            var histPtr = new HistoryMakerTaskParam
            {
                historyMaker = histMaker,
                portfolioDoc = doc
            };
            var task = new BackgroundWorkerTask(BackgroundWorkerTask.BackgroundWorkerTaskType.MakeTradeHistoryInDB,
                                                histPtr);

            workerQuote.RunWorkerAsync(task);
        }
Exemple #3
0
        private void DoFixtransactions(BackgroundWorkerTask taskParam)
        {
            var accountList   = (List <int>)taskParam.DataParam;
            int accountNumber = 0;

            foreach (var id in accountList)
            {
                if (workerQuote.CancellationPending)
                {
                    break;
                }
                var accountId = id;
                using (var db = new TradeSharpConnection())
                {
                    foreach (var order in db.POSITION_CLOSED.Where(p => p.AccountID == accountId))
                    {
                        if (workerQuote.CancellationPending)
                        {
                            break;
                        }
                        var orderId = order.ID;
                        if (db.BALANCE_CHANGE.Any(bc => bc.Position == orderId))
                        {
                            continue;
                        }

                        var changeType  = (int)(order.ResultDepo > 0 ? BalanceChangeType.Profit : BalanceChangeType.Loss);
                        var closeTime   = order.TimeExit;
                        var orderResult = Math.Abs(order.ResultDepo);
                        var missIdBc    = db.BALANCE_CHANGE.FirstOrDefault(b => b.AccountID == accountId &&
                                                                           b.ValueDate == closeTime &&
                                                                           b.Amount == orderResult);
                        if (missIdBc != null)
                        {
                            missIdBc.Position   = orderId;
                            missIdBc.ChangeType = changeType;
                        }
                        else
                        {
                            db.BALANCE_CHANGE.Add(new BALANCE_CHANGE
                            {
                                AccountID  = order.AccountID,
                                Position   = order.ID,
                                Amount     = order.ResultDepo,
                                ChangeType = changeType,
                                ValueDate  = order.TimeExit
                            });
                        }
                    }
                    db.SaveChanges();
                }
                workerQuote.ReportProgress(100 * (accountNumber++) / accountList.Count);
            }
        }
Exemple #4
0
        private void DoLoadQuotesFromForexite(BackgroundWorkerTask taskParam)
        {
            var folderYear = (Cortege2 <string, int>)taskParam.DataParam;
            var endYear    = DateTime.Now.Year;

            for (var year = folderYear.b; year < endYear; year++)
            {
                if (workerQuote.CancellationPending)
                {
                    break;
                }
                QuoteDownloader.DownloadForYear(year, folderYear.a);
                workerQuote.ReportProgress(year);
            }
        }
Exemple #5
0
        private void DoMakeJSON(BackgroundWorkerTask taskParam)
        {
            var data            = (Cortege3 <List <int>, string, int>)taskParam.DataParam;
            var accountList     = data.a;
            var targetFilePath  = data.b;
            var intervalMinutes = data.c;

            int accountNumber = 0;

            foreach (var id in accountList)
            {
                if (workerQuote.CancellationPending)
                {
                    break;
                }
                JsonTrackMaker.BuildTrack(
                    id,
                    targetFilePath + "_" + id + ".txt",
                    intervalMinutes);
                workerQuote.ReportProgress(100 * (accountNumber++) / accountList.Count);
            }
        }
Exemple #6
0
        private void btnMakeJson_Click(object sender, EventArgs e)
        {
            if (workerQuote.IsBusy)
            {
                workerQuote.CancelAsync();
                return;
            }

            var actIds = GetAccountIdsFromFarmSetsFile();

            if (actIds.Count == 0)
            {
                return;
            }

            lblWorkerProgress.Text = "Обработка счетов (JSON)";

            var task = new BackgroundWorkerTask(BackgroundWorkerTask.BackgroundWorkerTaskType.MakeJSON,
                                                new Cortege3 <List <int>, string, int>(actIds, tbFarmSetsPath.Text + "_json_",
                                                                                       tbTrackIntervalMinutes.Text.ToInt()));

            workerQuote.RunWorkerAsync(task);
        }
Exemple #7
0
        private void DoLoadQuotesFromTradeSharp(BackgroundWorkerTask taskParam)
        {
            var folder     = (string)taskParam.DataParam;
            var totalCount = Directory.GetFiles(folder, "*.quote").Count();
            var count      = 0;

            workerQuote.ReportProgress(0);
            foreach (var fileName in Directory.GetFiles(folder, "*.quote"))
            {
                var lastDate = GetFileLastDate(fileName);
                if (!lastDate.HasValue)
                {
                    continue;
                }

                var existFileName = fileName + ".temp";
                File.Move(fileName, existFileName);

                var ticker = Path.GetFileNameWithoutExtension(fileName).ToUpper();
                FileGapActualizator.FillGapsByTicker(ticker, lastDate.Value,
                                                     new List <GapInfo>
                {
                    new GapInfo
                    {
                        start  = lastDate.Value.AddMinutes(1),
                        end    = DateTime.Now,
                        status = GapInfo.GapStatus.Gap
                    }
                }, folder, workerQuote,
                                                     (s, list) => { });

                QuoteDownloader.Merge2Files(existFileName, fileName);

                workerQuote.ReportProgress(100 * (count++) / totalCount);
            }
        }
Exemple #8
0
        private void btnFixBalanceChanges_Click(object sender, EventArgs e)
        {
            if (workerQuote.IsBusy)
            {
                workerQuote.CancelAsync();
                return;
            }

            if (!File.Exists(tbFarmSetsPath.Text))
            {
                return;
            }

            List <int> actIds = GetAccountIdsFromFarmSetsFile();

            if (actIds == null || actIds.Count == 0)
            {
                return;
            }

            var task = new BackgroundWorkerTask(BackgroundWorkerTask.BackgroundWorkerTaskType.FixTransactions, actIds);

            workerQuote.RunWorkerAsync(task);
        }
Exemple #9
0
        private void btnFixBalanceChanges_Click(object sender, EventArgs e)
        {
            if (workerQuote.IsBusy)
            {
                workerQuote.CancelAsync();
                return;
            }

            if (!File.Exists(tbFarmSetsPath.Text)) return;

            List<int> actIds = GetAccountIdsFromFarmSetsFile();
            if (actIds == null || actIds.Count == 0)
                return;

            var task = new BackgroundWorkerTask(BackgroundWorkerTask.BackgroundWorkerTaskType.FixTransactions, actIds);
            workerQuote.RunWorkerAsync(task);
        }
Exemple #10
0
        private void DoMakeTradeHistoryInDB(BackgroundWorkerTask taskParam)
        {
            var taskPtr = (HistoryMakerTaskParam) taskParam.DataParam;
            var totalCount = taskPtr.portfolioDoc.DocumentElement.ChildNodes.Count;
            var currentNode = 0;
            foreach (XmlElement node in taskPtr.portfolioDoc.DocumentElement.ChildNodes)
            {
                if (workerQuote.CancellationPending)
                    break;
                Logger.InfoFormat("Старт формирования истории по счету - {0} из {1}", currentNode + 1, totalCount);
                taskPtr.historyMaker.MakeHistory(node);
                currentNode ++;
                workerQuote.ReportProgress(100 * currentNode / totalCount);
            }
            workerQuote.ReportProgress(100);

            if (taskPtr.historyMaker.testOnly)
            {
                using (var sw = new StreamWriter(ExecutablePath.ExecPath + "\\performance_test.txt", false, Encoding.UTF8))
                {
                    sw.WriteLine(AccountPerformance.MakeTableHeader());
                    taskPtr.historyMaker.performance.ForEach(sw.WriteLine);
                }
            }
        }
Exemple #11
0
        private void DoMakeJSON(BackgroundWorkerTask taskParam)
        {
            var data = (Cortege3<List<int>, string, int>) taskParam.DataParam;
            var accountList = data.a;
            var targetFilePath = data.b;
            var intervalMinutes = data.c;

            int accountNumber = 0;
            foreach (var id in accountList)
            {
                if (workerQuote.CancellationPending) break;
                JsonTrackMaker.BuildTrack(
                    id,
                    targetFilePath + "_" + id + ".txt",
                    intervalMinutes);
                workerQuote.ReportProgress(100*(accountNumber++)/accountList.Count);
            }
        }
Exemple #12
0
        private void DoLoadQuotesFromTradeSharp(BackgroundWorkerTask taskParam)
        {
            var folder = (string) taskParam.DataParam;
            var totalCount = Directory.GetFiles(folder, "*.quote").Count();
            var count = 0;
            workerQuote.ReportProgress(0);
            foreach (var fileName in Directory.GetFiles(folder, "*.quote"))
            {
                var lastDate = GetFileLastDate(fileName);
                if (!lastDate.HasValue) continue;

                var existFileName = fileName + ".temp";
                File.Move(fileName, existFileName);

                var ticker = Path.GetFileNameWithoutExtension(fileName).ToUpper();
                FileGapActualizator.FillGapsByTicker(ticker, lastDate.Value,
                    new List<GapInfo>
                    {
                        new GapInfo
                        {
                            start = lastDate.Value.AddMinutes(1),
                            end = DateTime.Now,
                            status = GapInfo.GapStatus.Gap
                        }
                    }, folder, workerQuote,
                    (s, list) => { });

                QuoteDownloader.Merge2Files(existFileName, fileName);

                workerQuote.ReportProgress(100*(count++)/totalCount);
            }
        }
Exemple #13
0
 private void DoLoadQuotesFromForexite(BackgroundWorkerTask taskParam)
 {
     var folderYear = (Cortege2<string, int>) taskParam.DataParam;
     var endYear = DateTime.Now.Year;
     for (var year = folderYear.b; year < endYear; year++)
     {
         if (workerQuote.CancellationPending) break;
         QuoteDownloader.DownloadForYear(year, folderYear.a);
         workerQuote.ReportProgress(year);
     }
 }
Exemple #14
0
        private void DoFixtransactions(BackgroundWorkerTask taskParam)
        {
            var accountList = (List<int>) taskParam.DataParam;
            int accountNumber = 0;
            foreach (var id in accountList)
            {
                if (workerQuote.CancellationPending) break;
                var accountId = id;
                using (var db = new TradeSharpConnection())
                {
                    foreach (var order in db.POSITION_CLOSED.Where(p => p.AccountID == accountId))
                    {
                        if (workerQuote.CancellationPending) break;
                        var orderId = order.ID;
                        if (db.BALANCE_CHANGE.Any(bc => bc.Position == orderId)) continue;

                        var changeType = (int) (order.ResultDepo > 0 ? BalanceChangeType.Profit : BalanceChangeType.Loss);
                        var closeTime = order.TimeExit;
                        var orderResult = Math.Abs(order.ResultDepo);
                        var missIdBc = db.BALANCE_CHANGE.FirstOrDefault(b => b.AccountID == accountId &&
                                                                             b.ValueDate == closeTime &&
                                                                             b.Amount == orderResult);
                        if (missIdBc != null)
                        {
                            missIdBc.Position = orderId;
                            missIdBc.ChangeType = changeType;
                        }
                        else
                            db.BALANCE_CHANGE.Add(new BALANCE_CHANGE
                            {
                                AccountID = order.AccountID,
                                Position = order.ID,
                                Amount = order.ResultDepo,
                                ChangeType = changeType,
                                ValueDate = order.TimeExit
                            });
                    }
                    db.SaveChanges();
                }
                workerQuote.ReportProgress(100*(accountNumber++)/accountList.Count);
            }
        }
Exemple #15
0
        private void btnMakeJson_Click(object sender, EventArgs e)
        {
            if (workerQuote.IsBusy)
            {
                workerQuote.CancelAsync();
                return;
            }

            var actIds = GetAccountIdsFromFarmSetsFile();

            if (actIds.Count == 0)
                return;

            lblWorkerProgress.Text = "Обработка счетов (JSON)";

            var task = new BackgroundWorkerTask(BackgroundWorkerTask.BackgroundWorkerTaskType.MakeJSON,
                new Cortege3<List<int>, string, int>(actIds, tbFarmSetsPath.Text + "_json_",
                    tbTrackIntervalMinutes.Text.ToInt()));
            workerQuote.RunWorkerAsync(task);
        }
Exemple #16
0
        private void MakeOrTestStrategies(bool makeNotTest)
        {
            if (workerQuote.IsBusy)
            {
                workerQuote.CancelAsync();
                return;
            }

            if (!File.Exists(tbFarmSetsPath.Text)) return;

            var doc = new XmlDocument();
            using (var sr = new StreamReader(tbFarmSetsPath.Text, Encoding.UTF8))
                doc.Load(sr);
            if (doc.DocumentElement == null)
                return;

            if (string.IsNullOrEmpty(richTextBoxAccountIds.Text)) return;
            var accIds = richTextBoxAccountIds.Text.ToIntArrayUniform();
            if (accIds.Length == 0) return;

            var quoteFolder = tbDestinationQuoteFolder.Text;
            if (string.IsNullOrEmpty(quoteFolder)) return;
            if (!Directory.Exists(quoteFolder)) return;

            var probWithdrawOnLossProfit = tbWdthProbOnLoss.Text.ToIntArrayUniform();
            var histMaker = new TradeHistoryMaker(tbSkipLossProb.Text.ToInt(), tbWithdrawProb.Text.ToInt(),
                probWithdrawOnLossProfit[0], probWithdrawOnLossProfit[1],
                !makeNotTest, tbStartTestDepo.Text.ToInt(),
                dpModelStartegiesStart.Value, dpModelStrategiesEnd.Value);

            var histPtr = new HistoryMakerTaskParam
            {
                historyMaker = histMaker,
                portfolioDoc = doc
            };
            var task = new BackgroundWorkerTask(BackgroundWorkerTask.BackgroundWorkerTaskType.MakeTradeHistoryInDB,
                    histPtr);
            workerQuote.RunWorkerAsync(task);
        }
Exemple #17
0
 public BackgroundWorkerArgs(Guid sessionGroupUniqueId, BackgroundWorkerTask task)
 {
     SessionGroupUniqueId = sessionGroupUniqueId;
     Task = task;
 }