private void CalculateData() { //对每个股票进行分析 StockSQL.DeleteRule(); analyse_now = 0; foreach (StockData stockheader in StockApp.allstock.Values) { //初始化股票 StockData stock = StockSQL.GetStockDetail_2(stockheader.code, stockheader.name); UtilLog.AddInfo(TAG, "Start to calculate " + stock.code); int stock_length = stock.items.Length; //第几个分析的股票 analyse_now++; CalBuy(stock); CalSell(stock); prog.SetProgress(analyse_now * 100 / analyse_total); //释放内存 if (analyse_now % 100 == 0) { UtilLog.AddInfo(TAG, "Start to free memory"); GC.Collect(); UtilLog.AddInfo(TAG, "Free memory done!"); System.Threading.Thread.CurrentThread.Join(500); } UtilLog.AddInfo(TAG, analyse_now + "/" + analyse_total + ":" + stock.name + "(" + stock.code + ")" + " calculate finished "); } RuleScore.SetRuleScore(); RuleScore.SetAllPreScore(); lbl_status.Text = "Calculation Done"; }
//同步股票数据 //2018-03-14 Reviewed private void SyncData() { //更新进度 int statusNum = 0; //删除已有股票 StockSQL.DeleteStock(); this.btn_syncData.Enabled = false; foreach (object obj in filelist) { statusNum++; string filename = (string)obj; StockData stock = new StockData(); stock.Init(filename); UtilLog.AddInfo(TAG, "Start to analyse " + stock.code + ";"); StockAttribute attri = new StockAttribute(stock); StockKPI kpi = new StockKPI(stock); if (!stock.IsValid()) { UtilLog.AddInfo(TAG, statusNum + "/" + filelist.Count + " " + stock.code + " skipped"); } else { attri.InitAttribute(); kpi.InitKPI(); StockSQL.InsertStockWithItem(stock); UtilLog.AddInfo(TAG, statusNum + "/" + filelist.Count + " " + stock.code + " initialization finished"); } int status = statusNum * 100 / filelist.Count; if (statusNum % 100 == 0) { GC.Collect(); } prog.SetProgress(status); } StockData.SetStockFull(); StockDapan.InsertStockDaPan(); this.btn_syncData.Enabled = true; }
//正式分析 private void Analyse() { System.Collections.ArrayList list = new System.Collections.ArrayList(); int itemnum = 0; list.Clear(); foreach (Buy buyitem in pnl_buysell.GetAllBuy()) { foreach (Sell sellitem in pnl_buysell.GetAllSell()) { foreach (int buyrule in Rule.rulebuy_type) { //计算的时候可以看到并没有考虑止损, 但实际显示结果时都有考虑 StockOpeItem[] rule_items = StockAnalysisSQL.CalculateSave2Analysis2(startdate, enddate, buyitem.ToString(), sellitem.ToString(), buyrule); //计算当前分析进度 foreach (StockOpeItem rule_item in rule_items) { if (rule_item.grade < buyitem.minumum_grade) { continue; } list.Add(rule_item); } } itemnum++; prog.SetProgress(itemnum * 100 * StockApp.allstock.Count / analyse_total); UtilLog.AddInfo(TAG, buyitem.ToString() + "-" + sellitem.ToString() + " analysis finished "); } }// for each buy StockAnalysisSQL.SaveToDB_Analysis2(list); UtilLog.AddInfo(TAG, startdate + " till " + enddate + " buy analyse finished."); }