public async void Run(OptionTradeList tradeList) { if (tradeList != null && tradeList.Trades.Count > 0) { //find DataRange StockData firstData = await StockDataBase.Get(tradeList.Stock, tradeList.Interval); int startIndex = firstData.FindDateIndex(_startDate); int stopIndex = firstData.FindDateIndex(_endDate); int dataCount = firstData.TimeSeries.DataPoints.Count; if (stopIndex == 0) { stopIndex = dataCount - 1; } //Simulate trades OptionPortfolio portfolio = new OptionPortfolio(_startBalance, _fee, _slippage); _balanceChart = new GraphData(_name + " Balance"); for (int i = startIndex; i <= stopIndex; i++) { foreach (OptionTrade trade in tradeList.Trades) { int dateIndex = firstData.FindDateIndex(trade.TradeDate); if (dateIndex == i) { portfolio.MakeTrade(trade, tradeList.Interval); } } DateTime date = firstData.TimeSeries.DataPoints[i].DateTime; GraphDataPoint balanceGraphDataPoint = new GraphDataPoint(date, await portfolio.TotalBalance(date, tradeList.Interval)); _balanceChart.DataPoints.Add(balanceGraphDataPoint); } } }
public async Task <double> TotalBalance() { return(await _portfolio.TotalBalance(_simDate)); }