private void FormStrategyDetail_Load(object sender, EventArgs e) { AddGridTitle(); ValidationJudger judger = new ValidationJudger(); judger.Judge(Results); StrategyJudger strategyJudger = new StrategyJudger(); strategyJudger.Judge(Results); InitScoresMapping(judger, strategyJudger); foreach (string strategyName in Results.AllStrategyNames) { IStockValues val = Results.GetResult(strategyName); ListViewItem listItem = new ListViewItem(strategyName); listItem.SubItems.Add(val.GetOperCount(OperType.Buy).ToString()); listItem.SubItems.Add(val.GetOperCount(OperType.Sell).ToString()); listItem.SubItems.Add(FindScore("Buy Signal", strategyName)); listItem.SubItems.Add(FindScore("Sell Signal", strategyName)); listItem.SubItems.Add(FindScore("Buy and Sell Signal", strategyName)); listItem.SubItems.Add(FindScore("Daily Prices Sigma", strategyName)); listViewStrategy.Items.Add(listItem); } }
public void Judge(IStrategyResults res) { ICollection <string> allStrategies = res.AllStrategyNames; IStockValues holderValues = res.GetResult("Hold"); List <DateTime> dates = holderValues.GetAllDate().ToList <DateTime>(); dates.Sort(); DateTime minDate = dates.First <DateTime>(); DateTime maxDate = dates.Last <DateTime>(); Debug.Assert(minDate < maxDate); DateTime curDate = minDate; while (curDate < maxDate) { foreach (string name in allStrategies) { IStockValues values = res.GetResult(name); double holderTotalValue = holderValues.GetTotalValue(curDate); double strategyTotalValue = values.GetTotalValue(curDate); Scores_.AddScore(name, CalcSimpleScore(holderTotalValue, strategyTotalValue)); } curDate = DateFunc.GetNextWorkday(curDate); } }
private void DrawResult(string strategyname) { chart1.Series.Add(strategyname); chart1.Series[strategyname].ChartArea = "Result"; // 设置Series绘制区域 chart1.Series[strategyname].ChartType = SeriesChartType.Point; chart1.Series[strategyname].XValueType = ChartValueType.DateTime; chart1.Series[strategyname]["PointWidth"] = "1.5"; IStockValues values = StrategyResults_.GetResult(strategyname); if (values == null) { return; } ICollection <DateTime> dates = values.GetAllDate(); foreach (DateTime dt in dates) { double val = values.GetTotalValue(dt); Debug.Assert(val > 0); int curPos = chart1.Series[strategyname].Points.AddXY(dt, val); if (values.GetOperationSignal(dt) == OperType.Buy) { chart1.Series[strategyname].Points[curPos].MarkerImage = ApplicationHelper.GetAppPath() + "\\image\\buysignal.bmp"; } else if (values.GetOperationSignal(dt) == OperType.Sell) { chart1.Series[strategyname].Points[curPos].MarkerImage = ApplicationHelper.GetAppPath() + "\\image\\sellsignal.bmp"; } } }
private void Start(IStockValues values, IFinanceStrategy strategy) { LogMgr.Logger.LogInfo("==>Start With Strategy: " + strategy.Name + "..."); Account acc = new Account(); acc.BankRoll = INITCASH; IStockHolder holder = new StockHolder(); holder.History = History_; acc.Holder = holder; strategy.Holder = holder; HolderManager.Instance().Holder = holder; acc.Processor = CurrentBonusProcessor; DateTime startDate = History_.MinDate; DateTime endDate = History_.MaxDate; LogMgr.Logger.LogInfo("Min Date = {0}, Max Date = {1}", startDate, endDate); Debug.Assert(endDate > startDate); while (startDate < endDate) { double totalvalue = acc.TotalValue(startDate); values.SetTotalValue(startDate, totalvalue); //acc.ProcessBonus(startDate); ICollection <StockOper> opers = strategy.GetOper(startDate, acc); if (opers != null) { foreach (StockOper oper in opers) { if (History_.IsOperSuccess(startDate, oper)) { acc.DoBusiness(oper); values.SetOperationSignal(startDate, oper.Type); } } } startDate = DateFunc.GetNextWorkday(startDate); } LogMgr.Logger.LogInfo("Strategy " + strategy.Name + " End Value: " + acc.TotalValue(startDate).ToString(CultureInfo.CurrentCulture)); LogMgr.Logger.LogInfo("Strategy " + strategy.Name + ": Buys: " + acc.BuyTransactionCount + ", Sells: " + acc.SellTransactionCount); LogMgr.Logger.LogInfo("<== End With Strategy: " + strategy.Name); }
public void GetResult() { StrategyResults res = new StrategyResults(); res.AddResult("Test", new StockValues()); IStockValues val = res.GetResult("Test"); Assert.IsNotNull(val); val = res.GetResult("NOTEXIST"); Assert.IsNull(val); }
public void Judge(IStrategyResults res) { _HoldValues = res.GetResult("Hold"); FindMaxMinDate(); foreach (string strategyName in res.AllStrategyNames) { IStockValues values = res.GetResult(strategyName); JudgeStrategy(strategyName, values); } }
public IStockValues GetResult(string strategyName) { IStockValues values = null; if (!NameToValues_.TryGetValue(strategyName, out values)) { return(null); } else { return(values); } }
private void Start(IStockValues values, IFinanceStrategy strategy) { LogMgr.Logger.LogInfo("==>Start With Strategy: " + strategy.Name + "..."); Account acc = new Account(); acc.BankRoll = INITCASH; IStockHolder holder = new StockHolder(); holder.History = History_; acc.Holder = holder; strategy.Holder = holder; HolderManager.Instance().Holder = holder; acc.Processor = CurrentBonusProcessor; DateTime startDate = History_.MinDate; DateTime endDate = History_.MaxDate; LogMgr.Logger.LogInfo("Min Date = {0}, Max Date = {1}", startDate, endDate); Debug.Assert(endDate > startDate); while (startDate < endDate) { double totalvalue = acc.TotalValue(startDate); values.SetTotalValue(startDate, totalvalue); //acc.ProcessBonus(startDate); ICollection<StockOper> opers = strategy.GetOper(startDate, acc); if (opers != null) { foreach (StockOper oper in opers) { if (History_.IsOperSuccess(startDate, oper)) { acc.DoBusiness(oper); values.SetOperationSignal(startDate, oper.Type); } } } startDate = DateFunc.GetNextWorkday(startDate); } LogMgr.Logger.LogInfo("Strategy " + strategy.Name + " End Value: " + acc.TotalValue(startDate).ToString(CultureInfo.CurrentCulture)); LogMgr.Logger.LogInfo("Strategy " + strategy.Name + ": Buys: " + acc.BuyTransactionCount + ", Sells: " + acc.SellTransactionCount); LogMgr.Logger.LogInfo("<== End With Strategy: " + strategy.Name); }
private void JudgeStrategy(string strategyName, IStockValues values) { SignalValidationCalc calc = new SignalValidationCalc(); calc.HoldValues = _HoldValues; DateTime curDate = _MinDate; while (curDate < _MaxDate) { OperType tp = values.GetOperationSignal(curDate); calc.AddSignal(curDate, tp); curDate = DateFunc.GetNextWorkday(curDate); } _Scores.SetScore(strategyName, calc.TotalScore); _BuyScores.SetScore(strategyName, calc.BuyScore); _SellScores.SetScore(strategyName, calc.SellScore); }
public void AddResult(string strategyName, IStockValues vals) { NameToValues_.Add(strategyName, vals); }