示例#1
0
            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);
            }
示例#2
0
        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);
                        }
                    }
                }
            }
        }