public static MarketResults operator+(MarketResults a, MarketResults b) { List <Company> lscomp = new List <Company>(); List <float> lsfloat = new List <float>(); for (int i = 0; i < a.Results.Count; i++) { lscomp.Add(a.Results[i].Item1); lsfloat.Add(a.Results[i].Item2); } for (int i = 0; i < b.Results.Count; i++) { if (!lscomp.Contains(b.Results[i].Item1)) { lscomp.Add(b.Results[i].Item1); lsfloat.Add(b.Results[i].Item2); } else { lsfloat[lscomp.IndexOf(b.Results[i].Item1)] += b.Results[i].Item2; } } MarketResults MR = new MarketResults(); for (int i = 0; i < lscomp.Count; i++) { MR.Results.Add(new Tuple <Company, float>(lscomp[i], lsfloat[i])); } return(MR); }
public virtual void Update() { //ActionTime += MainPage.master.SecondsPerTick; //accrued Time for actions foreach (var stockArr in stocks) { for (int i = 0; i < stockArr.Count; i++) { Money += stockArr[i].Collect(); } } if (ActionTime > 0) { MarketResults Final = new MarketResults(); foreach (Strategy strat in Strategies) { Final = Final + strat.StrategyOutcome(this, MainPage.exchange); } foreach (var tp in Final.Results) { if (tp.Item2 < 0) { //sell stocks, if any List <Stock> lsstocks = null; int index = InterestedCompanies.IndexOf(tp.Item1); try { lsstocks = stocks[index]; if (stocks[index].Count > 0) { for (int i = 0; i < tp.Item2 * 100 && i < lsstocks.Count; i++) { //sell stocks with float value or until all stocks are sold MainPage.exchange.SellStock(lsstocks[i]); } } } catch (Exception e) { System.Diagnostics.Debug.WriteLine("Internal Non-Fatal Error"); } } else { for (int i = 0; i < tp.Item2 * 100; i++) { //buy stocks here MainPage.exchange.BuyStock(tp.Item1, this); } } } } }