public OptionPortfolio(OptionPortfolio original) { Cash = original.Cash; CopyPositions(original); Fee = original.Fee; Slippage = original.Slippage; TradeMade = original.TradeMade; }
public void Start(double cash, DateTime startDate, Stock stock) { _simDate = startDate; ChangeStock(stock); _portfolio = new OptionPortfolio(cash, 1.1, 0.04); _portfolio.TradeMade += new EventHandler(FireTradeMade); _portofolioHistory = new List <OptionPortfolio>(); }
private void CopyPositions(OptionPortfolio original) { Positions = new List <OptionPosition>(); foreach (OptionPosition pos in original.Positions) { OptionPosition newPos = new OptionPosition() { Amount = pos.Amount, Spread = pos.Spread, EntryDate = pos.EntryDate }; Positions.Add(newPos); } }
public async void RollBackOneDay() { if (_portofolioHistory.Count > 0) { _dataIndex--; TimeSpan updateSpan = DateTime.UtcNow - _simDate; StockData stockData = await StockDataBase.Get(Stock, Api.Interval.Daily, updateSpan); if (_dataIndex >= 0) { _simDate = stockData.TimeSeries.DataPoints[_dataIndex].DateTime; ChangeStock(Stock); _portfolio = new OptionPortfolio(_portofolioHistory[_portofolioHistory.Count - 1]); _portofolioHistory.RemoveAt(_portofolioHistory.Count - 1); NextDaySimulated?.Invoke(this, new EventArgs()); } } }
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); } } }