diff --git a/Bot.cpp b/Bot.cpp index 067117d..6765887 100644 --- a/Bot.cpp +++ b/Bot.cpp @@ -64,8 +64,7 @@ void Bot::checkForBuySignal(double currPrice) if(getMonies() > currPrice) // can afford? { int monInt = (int) getMonies(); - int price = (int) currPrice; - updateNumStocks(floor(monInt/price)-1); + int price = (int) currPrice;updateNumStocks(floor(monInt/price)-1); updateMonies(getMonies()-(getNumStocks()*currPrice)); updateAssets(getAssets() +(getNumStocks()*currPrice)); diff --git a/Bot.h b/Bot.h index 2c327dd..8a99b57 100644 --- a/Bot.h +++ b/Bot.h @@ -8,6 +8,8 @@ #ifndef BOT_H_ #define BOT_H_ #include +#include +using namespace std; class Bot { public: Bot(); diff --git a/Driver.cpp b/Driver.cpp index 2cc7793..6cf62ef 100644 --- a/Driver.cpp +++ b/Driver.cpp @@ -7,6 +7,7 @@ #include "Driver.h" #include "Exchange.h" +#include "GenAlg.h" #include #include #include @@ -33,12 +34,18 @@ int main() Results data; cout <<"Done .1.." << endl; + //Population test; + //test.generateGeneration0(); + //test.printPop(); + //Individual father = test.randomlySelectFromPop(); + //cout << "Father: " << father.getAttributeAt(0) << " sf " << father.getAttributeAt(2) ; + data = temp->getFitness(100,10000); // Within each exchange, a series of different tests will be performed // that will vary the savings Factor and the initial starting money // Savings factor will vary from 2% to 50% of initial starting money // whereas initial starting money will be either 10k, 50k, 100k, 500k - data = temp->getFitness(200, 10000); +// data = temp->getFitness(200, 10000); // TODO // Keep track of the range of perfomance for those with high // fitness values, update results.h with an int array that holds @@ -49,16 +56,18 @@ int main() // the distribution[], starting Money, - cout <<"Done .2.." << endl; - cout << "Fitness: " << data.getTotalValue() << endl; - cout << "Min: " << data.getMin() << " | Max: " << data.getMax() << endl; +// cout <<"Done .2.." << endl; +// cout << "Fitness: " << data.getTotalValue() << endl; // access the fitness value - cout << "Graph attr: min - " << data.getAttributesForDistr()->getMin() << " max - " << data.getAttributesForDistr()->getMax() << " "; - cout << "interval - " << data.getAttributesForDistr()->getInterval() << endl; +// cout << "Min: " << data.getMin() << " | Max: " << data.getMax() << endl; + +// cout << "Graph attr: min - " << data.getAttributesForDistr()->getMin() << " max - " << data.getAttributesForDistr()->getMax() << " "; +// cout << "interval - " << data.getAttributesForDistr()->getInterval() << endl; // Only access the distrubtion graph if it is one of the chosen individuals // from the population /* int num=0; + cout << "Distribution performance " << endl; int range = data.getAttributesForDistr()->getMin(); for (int j=0; j < 40; j++) { @@ -69,8 +78,33 @@ int main() printX(num); cout << endl; } - delete temp; + //delete temp; */ +// cout << "+++++++++++++++++++++++++++++++++++++++++++++++++" << endl; + +/* + cout << "Graph Perf-vs-Price attr: min - " << data.getAttributesForPerfVsPrice()->getMin() << " max - " << data.getAttributesForPerfVsPrice()->getMax() << " "; + cout << "interval - " << data.getAttributesForPerfVsPrice()->getInterval() << endl; + int range1 =data.getAttributesForPerfVsPrice()->getMin(); + + for (int k=0; k < 40; k++) + { + //cout << range1 << " - "; + range1+=data.getAttributesForPerfVsPrice()->getInterval(); + //cout << range1 << " : "; + + for (int p=0; p < data.getSizeOfListAt(k); p++ ) + { + //cout << " " << data.getListAt_PositionAt(k,p) << " "; + } + //cout << endl; + } +*/ + + + + + //tempF = temp->getFitness(20,5,10); // cout << "Fitness: " << tempF << endl; diff --git a/Exchange.cpp b/Exchange.cpp index 6c03898..e8bb965 100644 --- a/Exchange.cpp +++ b/Exchange.cpp @@ -47,7 +47,7 @@ Results Exchange::startSim() int prevDay=0; - Queue pricePerDay; // keeps record of all the prices during the + Queue* pricePerDay = new Queue(); // keeps record of all the prices during the // existence of the stock while(!yearHasPassed() && !crashed()) // adjust accordingly depending on type of sim @@ -70,7 +70,8 @@ Results Exchange::startSim() // updates queue for moving averages on a new day if (newDay(prevDay)) { - pricePerDay.enqueue(new Node(getPrice(), getTime()->copy())); + + pricePerDay->enqueue(new Node(getPrice(), getTime()->copy())); //cout << "Monies: " << monies << " | Assets: " << assets << " | Savings: " << savings << endl; trader.updatePPA1(getMovingAvg(days1)); @@ -113,9 +114,9 @@ Results Exchange::startSim() } - /* - cout << "Moving1: " << endl; +// cout << "Moving1: " << endl; +/* Node *data = days1.dequeue(); while(!days1.isEmpty()) { @@ -128,9 +129,10 @@ Results Exchange::startSim() else { cout << "NULL" << endl; } data = days1.dequeue(); } - cout << "-----------" << endl; - cout << "Moving2: " << endl; - +*/ +// cout << "-----------" << endl; +// cout << "Moving2: " << endl; +/* while(!days2.isEmpty()) { data = days2.dequeue(); @@ -161,6 +163,9 @@ ExperimentType* Exchange::getExp() { return exp; } int Exchange::getCorrespondingPosition(double portfolioVal, int interval, int min) { + cout << "Value: " << portfolioVal << " Min: " << min << endl; + cout << "Subtract: " << portfolioVal-min << endl; + cout << "Interval: " << interval << endl; return floor( ( ((int) portfolioVal) - min ) / interval ); } @@ -299,27 +304,30 @@ Results Exchange::getFitness(int savingFact, double startMon) int min, max, interval, intervalPrice, positionToIncrement; min=max=interval=0; // Processing for performance distribution - cout << "Pre flooring " << min_max.getMin() << endl; - cout << "Pre ceiling " << min_max.getMax() << endl; +// cout << "Pre flooring " << min_max.getMin() << endl; +// cout << "Pre ceiling " << min_max.getMax() << endl; min = floor( ((int)min_max.getMin()) / 100 )*100; - cout << "Min: " << min << endl; +// cout << "Min: " << min << endl; max = ceil( (int)min_max.getMax()/100)*100 + 100; - cout << "Max: " << max << endl; + //cout << "Max: " << max << endl; interval = (max - min)/40; min_max.getAttributesForDistr()->setMin(min); min_max.getAttributesForDistr()->setMax(max); min_max.getAttributesForDistr()->setInterval(interval); - cout << "Interval: " << interval << endl; + //cout << "Interval: " << interval << endl; // processing for stock price vs. perfomance relation + // NOTE : min, max, and interval for the price vs performance is denoted + // with the word "Price" appended to the variable name cout << "------ Stock price vs Performance " << endl; cout << "Min: " << minPrice << endl << "Max: " << maxPrice << endl; - minPrice = floor(minPrice/10)*10; - maxPrice = ceil(maxPrice/10)*10+10; + minPrice = floor(minPrice/10)*10 - 10; + maxPrice = ceil(maxPrice/10)*10+50; cout << "Min: " << minPrice << endl << "Max: " << maxPrice << endl; - intervalPrice = (maxPrice-minPrice)/40; + intervalPrice = (20+maxPrice-minPrice)/40; + cout << "Interval: " << intervalPrice << endl << endl; min_max.getAttributesForPerfVsPrice()->setMin(minPrice); min_max.getAttributesForPerfVsPrice()->setMax(maxPrice); min_max.getAttributesForPerfVsPrice()->setInterval(intervalPrice); @@ -327,15 +335,21 @@ Results Exchange::getFitness(int savingFact, double startMon) for (int j=0; j < getExp()->getNumTests(); j++ ) { - //cout << " " << data[j].getTotalValue() << endl; - // TODO - // Add logic to add in the performance + // TODO + // Uncomment the increment distribution function !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! positionToIncrement = getCorrespondingPosition(data[j].getTotalValue(), interval, min); //cout << "Postion to increment: " << positionToIncrement << endl; min_max.incrementDistributionAt(positionToIncrement); + positionToIncrement = getCorrespondingPosition(data[j].getFinalPrice(), intervalPrice, minPrice); + cout << "Position to increment: " << positionToIncrement << endl; + if (positionToIncrement >= 40) { cout << "Error in getFitness() -- position to increment too high" << endl; } + else + { + min_max.addToPerfVsPrice(positionToIncrement, data[j].getTotalValue()); + } // TODO // Write all of the stock lifecycles to a file by outputting each queue @@ -356,14 +370,96 @@ Results Exchange::getFitness(int savingFact, double startMon) //cout << "check if set " << min_max.getTotalValue() << endl; data[getExp()->getNumTests()] = min_max; + //Results* datatemp[getExp()->getNumTests()]; + //*datatemp = data; + + CSVExport(data, getExp()->getNumTests()); return min_max; } +void Exchange::CSVExport(Results data[], int size) +{ + // Gives us the number of elements of type Results in the array "data" + + Node* temp = nullptr; + bool done = false; + cout << "Number of trials: " << size << endl; + ofstream Data_File; + Data_File.open("myStockSimulationData.csv"); + if (Data_File.is_open()) + { + cout << "Reading file " << endl; + } + else + { + cout << "Error: could not read file " << endl; + } + Data_File << "Stock Final Price,Stock Total Value,Money,Assets,Savings,Number of Stocks, Minimum Performance, Maximum Performance"; + for (int i = 1; i <= size; i++) + { + Data_File << ",Trial " << (i); + } + + Data_File << "\n"; + + for (int i = 0; i < size; i++) + { + Data_File << data[i].getFinalPrice() << "," << data[i].getTotalValue() << "," << data[i].getMoney() + << "," << data[i].getAssets() << "," << data[i].getSavings() << "," << data[i].getNumStocks() << "," + << data[i].getMin() << "," << data[i].getMax(); + if (!data[0].getLifeCycle()->isEmpty()) + { + for (int j = 0; j < size; j++) + { + temp = data[j].getLifeCycle()->dequeue(); + Data_File << "," << temp->getPrice(); + } + } + Data_File << "\n"; + } + if (!data[0].getLifeCycle()->isEmpty()) + { + while (!done) + { + Data_File << " " << "," << " " << "," << " " + << "," << " "<< "," << " "<< "," << " " << "," + << " " << "," << " "; + for (int j = 0; j < size; j++) + { + Data_File << "," << data[j].getLifeCycle()->dequeue()->getPrice(); + } + Data_File << "\n"; + if (data[0].getLifeCycle()->isEmpty() == true) + { + done = true; + } + } + } + Data_File.close(); + + cout << "Graph Perf-vs-Price attr: min - " << data[size].getAttributesForPerfVsPrice()->getMin() << " max - " << data[size].getAttributesForPerfVsPrice()->getMax() << " "; + cout << "interval - " << data[size].getAttributesForPerfVsPrice()->getInterval() << endl; + int range1 =data[size].getAttributesForPerfVsPrice()->getMin(); + + for (int k=0; k < 40; k++) + { + //cout << range1 << " - "; + range1+=data[size].getAttributesForPerfVsPrice()->getInterval(); + cout << range1 << " : "; + + for (int p=0; p < data[size].getSizeOfListAt(k); p++ ) + { + cout << " " << data[size].getListAt_PositionAt(k,p) << " "; + } + cout << endl; + } + +} diff --git a/Exchange.h b/Exchange.h index 5775e45..3382664 100644 --- a/Exchange.h +++ b/Exchange.h @@ -13,6 +13,7 @@ #include "ExperimentType.h" #include "Results.h" #include "Bot.h" +#include #include #include using namespace std; @@ -27,6 +28,7 @@ class Exchange { Results getFitness(int savingFact, double startMon); // change to return a "Result" object void printByDay(); void tick(bool pass); + void CSVExport(Results data[], int size); ExperimentType* getExp(); int getCorrespondingPosition(double portfolioVal, int interval, int min); // O(1) !!!!!!!!!!!!!!!!!!!!!!!!!! diff --git a/GenAlg.cpp b/GenAlg.cpp new file mode 100644 index 0000000..e9b2461 --- /dev/null +++ b/GenAlg.cpp @@ -0,0 +1,28 @@ +/* + * GenAlg.cpp + * + * Created on: Dec 3, 2016 + * Author: rocco + */ + +#include "GenAlg.h" + +/* +runGA(population , exchange) +{ + repeat + newPop = {} + for (i=1 to population.size()) + { + father = randomSelect(population, exchange); + mother = " "; + child = reproduce(father, mother) + if (small probability) { child = mutate(child); } + add child to newPop; + } + population = newPop; + until 24 hours have passed + + return best(population) +} +*/ diff --git a/GenAlg.h b/GenAlg.h new file mode 100644 index 0000000..fe83243 --- /dev/null +++ b/GenAlg.h @@ -0,0 +1,15 @@ +/* + * GenAlg.h + * + * Created on: Dec 3, 2016 + * Author: rocco + */ + +#ifndef GENALG_H_ +#define GENALG_H_ +#include "Population.h" +class GenAlg { +}; + + +#endif /* GENALG_H_ */ diff --git a/Individual.cpp b/Individual.cpp new file mode 100644 index 0000000..70fc03c --- /dev/null +++ b/Individual.cpp @@ -0,0 +1,30 @@ +/* + * Individual.cpp + * + * Created on: Dec 3, 2016 + * Author: rocco + */ + +#include "Individual.h" + +Individual::Individual() : fitnessValue(1) { setUpAttributes(); } + +void Individual::setUpAttributes() +{ + for (int j=0; j<3; j++) + { + attributes[j] = 0; + } +} + +void Individual::setAttributeAt( int pos, double setThis) +{ + if (pos >= 0 && pos < 3) { attributes[pos] = setThis; } + else { cout << "Error: Cannot add at this position for the individual." << endl; } +} + +void Individual::setFitnessValue(double newFit) { fitnessValue = newFit; } + +double Individual::getFitnessValue() { return fitnessValue; } + +double Individual::getAttributeAt(int pos) { return attributes[pos]; } diff --git a/Individual.h b/Individual.h new file mode 100644 index 0000000..48a77c4 --- /dev/null +++ b/Individual.h @@ -0,0 +1,32 @@ +/* + * Individual.h + * + * Created on: Dec 3, 2016 + * Author: rocco + */ + +#ifndef INDIVIDUAL_H_ +#define INDIVIDUAL_H_ +#include +#include + +using namespace std; + +class Individual { +public: + Individual(); + + void setUpAttributes(); + void setAttributeAt( int pos, double setThis); + void setFitnessValue(double newFit); + + double getFitnessValue(); + double getAttributeAt(int pos); + +private: + double attributes[3]; // mov1, mov2, saving Factor + double fitnessValue; +}; + + +#endif /* INDIVIDUAL_H_ */ diff --git a/LList.cpp b/LList.cpp index d44e707..7d269fc 100644 --- a/LList.cpp +++ b/LList.cpp @@ -15,6 +15,7 @@ void LList::add(double dataIn) { head = new Node(dataIn, nullptr); head->setPos(0); + head->setNext(nullptr); } else { @@ -37,7 +38,7 @@ void LList::add(double dataIn) double LList::getDataAt(int pos) { - if (pos < 0 || pos > getSize()) { return -100; } // out of bounds access + if (pos < 0 && pos > getSize()) { return -100; } // out of bounds access else { bool done = false; diff --git a/Population.cpp b/Population.cpp new file mode 100644 index 0000000..8572317 --- /dev/null +++ b/Population.cpp @@ -0,0 +1,198 @@ +/* + * Population.cpp + * + * Created on: Dec 3, 2016 + * Author: rocco + */ + +#include "Population.h" + +Population::Population() +{ + setGen(); +} + +Population::~Population() +{ + for (int j=0; j < getSize(); j++) + { + + delete Gen0[j]; + } +} + +void Population::setGen() +{ + for (int j=0; j < getSize(); j++) + { + + Gen0[j] = new Individual(); + } +} + +void Population::generateGeneration0() +{ + // moving averages can vary from 1 - 200 days + // saving factor can vary from 50 - 5000 + srand(time(NULL)); + double mov1, mov2, savingFactor; + for(int k=0; k < getSize(); k++) + { + mov1 = (rand()%200) +1; + mov2 = (rand()%200) +1; + savingFactor = (rand()%4950) +50; + + Gen0[k]->setAttributeAt(0,mov1); + Gen0[k]->setAttributeAt(1,mov2); + Gen0[k]->setAttributeAt(2,savingFactor); + } + + +} + +void Population::printPop() +{ + for (int k=0; k < getSize(); k++) + { + cout << k << " : Moving1 = " << Gen0[k]->getAttributeAt(0) << " "; + cout << "Moving2 = " << Gen0[k]->getAttributeAt(1) << " "; + cout << "Saving Factor = " << Gen0[k]->getAttributeAt(2) << endl; + } +} + +void Population::addChildToPos(int pos, Individual thisChild) +{ + // Be sure to deallocate the memory of that position !!!!!!!!!!!!!!!!!!!!!!!! + +} + +int Population::getSize() { return sizeOfPop; } + +Individual Population::randomlySelectFromPop() +{ + // build roullete wheel based off of their fitness values + srand(time(NULL)); + double randNum = 0; // random number from 0 - 1 + randNum = ((double) rand() / (RAND_MAX)); + + double summationOfFitnessInPop = getTotalFitnessFromPop(); // summation of all the fitness values in the population + double sumOfCheckedInd = 0; // summation of all the fitness values that have been traversed thus far + bool done = false; + + if (summationOfFitnessInPop < 1) { cout << "ERROR!!"; exit(1); } // function called before setting population + + Individual prev = *Gen0[0]; + Individual curr = *Gen0[1]; + int counter = 2; + + // check starting case + if (randNum > 0 && randNum < (prev.getFitnessValue()/summationOfFitnessInPop)) + { + return prev; + } + + sumOfCheckedInd = prev.getFitnessValue(); + while (!done) + { + + if (sumOfCheckedInd/summationOfFitnessInPop < randNum && + randNum <= (sumOfCheckedInd + curr.getFitnessValue())/summationOfFitnessInPop) + { + return curr; + } + else + { + sumOfCheckedInd+=curr.getFitnessValue(); + //prev = curr;a + curr = *Gen0[counter]; + counter++; + if (counter == 100) { done = true; } // avoid from accessing out of bounds. Should never happen though + } + } +} + +Individual Population::reproduce(Individual father, Individual mother) +{ + srand(time(NULL)); + int chooseFromFatherOrMother = ( rand() % 2) + 1; + int numAttributesToCopy = ( rand() % 2) + 1; + int whichAttributeToCopy1 = ( rand() % 3) + 1; + int whichAttributeToCopy2 = ( rand() % 3) + 1; + + while(whichAttributeToCopy1 == whichAttributeToCopy2) // ensure unique attributes are copied + { + whichAttributeToCopy2 = ( rand() % 3) + 1; + } + + double childMov1, childMov2, childSavingFactor; + childMov1 = childMov2 = childSavingFactor = -1; // flag that is has not yet been updated + + if (chooseFromFatherOrMother == 1) // get attributes from mother first + { + if (numAttributesToCopy == 2) + { + if (whichAttributeToCopy1 == 1) { childMov1 = mother.getAttributeAt(1); } + else if (whichAttributeToCopy1 == 2) { childMov2 = mother.getAttributeAt(2); } + else { childSavingFactor = mother.getAttributeAt(3); } + + if (whichAttributeToCopy2 == 1) { childMov1 = mother.getAttributeAt(1); } + else if (whichAttributeToCopy2 == 2) { childMov2 = mother.getAttributeAt(2); } + else { childSavingFactor = mother.getAttributeAt(3); } + + } + else + { + if (whichAttributeToCopy1 == 1) { childMov1 = mother.getAttributeAt(1); } + else if (whichAttributeToCopy1 == 2) { childMov2 = mother.getAttributeAt(2); } + else { childSavingFactor = mother.getAttributeAt(3); } + } + + // Identify which attribute has not yet been inherited and get from father + if (childMov1 == -1) { childMov1 = father.getAttributeAt(1); } + if (childMov2 == -1) { childMov2 = father.getAttributeAt(2); } + if (childSavingFactor == -1) { childSavingFactor = father.getAttributeAt(3); } + + } + else // get attributes from mother + { + if (numAttributesToCopy == 2) + { + if (whichAttributeToCopy1 == 1) { childMov1 = father.getAttributeAt(1); } + else if (whichAttributeToCopy1 == 2) { childMov2 = father.getAttributeAt(2); } + else { childSavingFactor = father.getAttributeAt(3); } + + if (whichAttributeToCopy2 == 1) { childMov1 = father.getAttributeAt(1); } + else if (whichAttributeToCopy2 == 2) { childMov2 = father.getAttributeAt(2); } + else { childSavingFactor = father.getAttributeAt(3); } + + } + else + { + if (whichAttributeToCopy1 == 1) { childMov1 = father.getAttributeAt(1); } + else if (whichAttributeToCopy1 == 2) { childMov2 = father.getAttributeAt(2); } + else { childSavingFactor = father.getAttributeAt(3); } + } + + // Identify which attribute has not yet been inherited and get from Mother + if (childMov1 == -1) { childMov1 = mother.getAttributeAt(1); } + if (childMov2 == -1) { childMov2 = mother.getAttributeAt(2); } + if (childSavingFactor == -1) { childSavingFactor = mother.getAttributeAt(3); } + } + + Individual child; child.setAttributeAt(0, childMov1); child.setAttributeAt(1, childMov2); + child.setAttributeAt(2, childSavingFactor); + return child; + +} + +double Population::getTotalFitnessFromPop() +{ + double sum; + for (int j = 0; j < getSize(); j++) + { + sum += Gen0[j]->getFitnessValue(); + } + return sum; +} + + diff --git a/Population.h b/Population.h new file mode 100644 index 0000000..4fc9bad --- /dev/null +++ b/Population.h @@ -0,0 +1,43 @@ +/* + * Population.h + * + * Created on: Dec 3, 2016 + * Author: rocco + */ + +#ifndef POPULATION_H_ +#define POPULATION_H_ +#include "Individual.h" +#include +#include + +class Population { + +public: + Population(); + int getSize(); + + Individual randomlySelectFromPop(); + Individual reproduce(Individual father, Individual mother); + Individual mutate(Individual preMutant); + + double getTotalFitnessFromPop(); + + void generateGeneration0(); + void getPopulationsFitnessValues(); + void addChildToPos(int pos, Individual thisChild); + void printPop(); + void setGen(); + + ~Population(); +private: + + const int sizeOfPop = 10; // size of population + Individual* Gen0[10]; +}; + + +#endif /* POPULATION_H_ */ + + +// LEFT OFF HERE diff --git a/Queue.cpp b/Queue.cpp index 15b53fb..f088c3c 100644 --- a/Queue.cpp +++ b/Queue.cpp @@ -7,7 +7,7 @@ #include "Queue.h" -Queue::Queue() : first(nullptr), last(nullptr), MAX_SIZE(365), currSize(0) {} +Queue::Queue() : first(nullptr), last(nullptr), MAX_SIZE(10000), currSize(0) {} Queue::Queue(int sizeIn) : first(nullptr), last(nullptr), MAX_SIZE(sizeIn), currSize(0) {} @@ -17,6 +17,8 @@ void Queue::enqueue(Node* lastIn) { first = lastIn; last = lastIn; + + currSize++; } else { diff --git a/Results.cpp b/Results.cpp index 076c851..ca431be 100644 --- a/Results.cpp +++ b/Results.cpp @@ -7,13 +7,13 @@ #include "Results.h" -Results::Results() : stockFinalPrice(0), money(0), assets(0), +Results::Results() : stockFinalPrice(0), money(0), assets(0), lifeCycle(nullptr), savings(0), numStocks(0) , minPerf(0), maxPerf(0) {setUpDistributionSet(); parametersForDistr=new GraphAttributes(); parametersForPerfVsPrice=new GraphAttributes(); setUpPerfVsPrice(); } -Results::Results(Queue life, double price, double moneyIn, double assetsIn, +Results::Results(Queue* life, double price, double moneyIn, double assetsIn, double savingsIn, double numS) : lifeCycle(life), stockFinalPrice(price), money(moneyIn), assets(assetsIn), savings(savingsIn), numStocks(numS), @@ -21,7 +21,7 @@ Results::Results(Queue life, double price, double moneyIn, double assetsIn, parametersForDistr=new GraphAttributes(); setUpPerfVsPrice(); parametersForPerfVsPrice=new GraphAttributes();} -Queue Results::getLifeCycle() { return lifeCycle; } +Queue* Results::getLifeCycle() { return lifeCycle; } double Results::getTotalValue() { @@ -69,15 +69,40 @@ void Results::setUpDistributionSet() } } +void Results::addToPerfVsPrice(int pos, double data) +{ + if (pos < 0 && pos > 40) + { + cout << "Error: Invalid location to add to Performance vs. Price" << endl; + } + else + { + performanceVsPrice[pos]->add(data); + } +} + void Results::setUpPerfVsPrice() { - LList initializer; for (int j=0; j < 40; j++) { - performanceVsPrice[j] = initializer; + performanceVsPrice[j] = new LList(); } } +double Results::getListAt_PositionAt(int positionInArr, int posInLList) +{ + if (positionInArr >= 0 && positionInArr < 40) + { + return performanceVsPrice[positionInArr]->getDataAt(posInLList); + } + else { return -200; } // error +} + +int Results::getSizeOfListAt(int pos) +{ + return performanceVsPrice[pos]->getSize(); +} + GraphAttributes* Results::getAttributesForDistr() { return parametersForDistr; } GraphAttributes* Results::getAttributesForPerfVsPrice() { return parametersForPerfVsPrice; } diff --git a/Results.h b/Results.h index 9f5ad65..dc19007 100644 --- a/Results.h +++ b/Results.h @@ -14,9 +14,9 @@ class Results { public: Results(); - Results(Queue life, double price, double moneyIn, double assetsIn, double savingsIn, double numS); + Results(Queue* life, double price, double moneyIn, double assetsIn, double savingsIn, double numS); - Queue getLifeCycle(); + Queue* getLifeCycle(); double getTotalValue(); double getFinalPrice(); double getMoney(); @@ -31,6 +31,8 @@ class Results { void incrementDistributionAt(int position); GraphAttributes* getAttributesForPerfVsPrice(); + double getListAt_PositionAt(int positionInArr, int posInLList); + int getSizeOfListAt(int pos); void addToPerfVsPrice(int pos, double data); void setUpPerfVsPrice(); @@ -45,7 +47,7 @@ class Results { void setUpDistributionSet(); // Possibly hold the life cycle - Queue lifeCycle; + Queue* lifeCycle; double stockFinalPrice; double totalValue; double money; @@ -59,7 +61,7 @@ class Results { int distribution[40]; // holds all performance values GraphAttributes* parametersForDistr; - LList performanceVsPrice[40]; + LList* performanceVsPrice[40]; GraphAttributes* parametersForPerfVsPrice; int volatilityFactor; // TODO Calculate a volatility factor diff --git a/myStockSimulationData.csv b/myStockSimulationData.csv new file mode 100644 index 0000000..e80bc64 --- /dev/null +++ b/myStockSimulationData.csv @@ -0,0 +1,365 @@ +Stock Final Price,Stock Total Value,Money,Assets,Savings,Number of Stocks, Minimum Performance, Maximum Performance,Trial 1,Trial 2,Trial 3,Trial 4,Trial 5,Trial 6,Trial 7,Trial 8,Trial 9,Trial 10 +941.227,10049.7,9949.67,0,100,0,0,0,1017,998.569,1012.11,1003.42,972.766,1013.69,994.157,991.124,1007.57,991.598 +1069.74,10832.2,1874.29,8557.93,400,8,0,0,1017.29,997.104,1002.06,1007.87,974.646,1001.33,998.073,990.9,1022.59,996.812 +1323.95,12589.1,2345.4,7943.69,2300,6,0,0,1021.05,987.865,1002.05,1020.48,962.209,1002.68,997.877,996.06,1021.14,989.58 +1353.13,11610.5,9610.54,0,2000,0,0,0,1028.7,990.604,992.943,1014.39,959.345,998.275,999.389,992.063,1029.01,1014.72 +1037.62,9954.86,9354.86,0,600,0,0,0,1037.3,988.325,994.659,1007.92,967.062,995.372,1004.58,997.845,1040.34,1017.73 +1057.45,9799.89,9599.89,0,200,0,0,0,1036.95,983.277,1003.37,1013.12,986.63,1004.32,1001.73,995.484,1034.11,1021.45 +1106.73,10457.8,1103.96,8853.84,500,8,0,0,1050.82,980.592,992.199,1018.62,984.6,1008.7,1006.37,1009.99,1030.57,1030.64 +1232.7,12388.7,1727.17,9861.57,800,8,0,0,1028.23,988.853,989.784,1021.44,982.286,1018.19,1001.41,1010.37,1030.3,1029.43 +1311.08,11545.2,1778.78,7866.45,1900,6,0,0,1030.82,993.341,982.712,1023.55,993.057,1002.62,1015.49,1012.76,1028.54,1038.48 +1155.7,11016.6,1826.74,8089.89,1100,7,0,0,1047.42,992.547,973.889,1014.45,990.661,1008.71,1007.64,1014.33,1021.27,1055.8 + , , , , , , , ,1053.38,997.376,980.766,990.197,1002.62,999.541,1031.3,1023.12,1027.78,1085.75 + , , , , , , , ,1048.75,991.205,992.249,982.875,1003.18,1008.64,1043.69,1017.98,1009.98,1083.43 + , , , , , , , ,1028.33,996.032,994.088,981.604,995.616,1015.63,1055.69,1000.33,1018.85,1066.62 + , , , , , , , ,1021.56,1012.63,1003.88,971.229,1013.92,1026.87,1056.47,993.094,1025.86,1050.54 + , , , , , , , ,1023.71,988.398,1003.55,976.923,1002.99,1033.49,1044.03,1005.19,1023.33,1041.03 + , , , , , , , ,1028.91,975.491,994.485,977.312,1001.67,1010.16,1048.45,1005.98,1015.43,1030.32 + , , , , , , , ,1013.57,985.531,1009.86,954.868,998.482,1008.15,1065.34,1004.88,1026.13,1026.99 + , , , , , , , ,1011.5,984.944,1029.01,965.492,997.581,1019.32,1065.2,1008.61,1026.67,1026.34 + , , , , , , , ,992.816,981.151,1034.31,964.349,1013.68,1017.28,1055.58,1006.57,1016.64,1027.9 + , , , , , , , ,993.508,990.93,1027.14,972.852,1026.07,1037.07,1057.18,1005.62,1022.56,1026.37 + , , , , , , , ,991.211,987.399,1039.93,986.458,1029.39,1036.55,1054.49,1012.72,1019.47,1035.89 + , , , , , , , ,991.167,996.674,1035.58,988.227,1030.35,1052.14,1052.06,995.815,1039.84,1022.71 + , , , , , , , ,983.617,976.97,1054.34,995.12,1014.58,1058.21,1043.41,1009.69,1040.97,1030.41 + , , , , , , , ,976.406,989.302,1046.71,990.683,1028.99,1062.41,1036.61,1010.82,1054.65,1032.58 + , , , , , , , ,992.89,986.58,1056.45,984.417,1023.16,1052.05,1053.28,998.104,1054.44,1051.38 + , , , , , , , ,991.772,966.835,1065.34,989.619,1029.54,1058.65,1043.55,1017.78,1052.91,1047.68 + , , , , , , , ,996.506,960.383,1086,980.873,1024.02,1036.87,1045.09,1026.45,1060.08,1059.42 + , , , , , , , ,1006,963.943,1100.55,981.207,1020.95,1029.78,1036.98,1029.79,1058.76,1066.6 + , , , , , , , ,1005,954.058,1098.53,982.437,1023.65,1046.22,1020.22,1038.66,1051.05,1065.26 + , , , , , , , ,1005.42,954.337,1108.67,947.675,1031.74,1050.22,992.9,1037.27,1045.11,1079 + , , , , , , , ,998.624,943.923,1102.43,954.438,1028.18,1041.82,990.124,1033.67,1040.17,1080.1 + , , , , , , , ,1002.47,956.087,1085.52,959.883,1022.7,1036.24,987.982,1021.01,1035.47,1089.73 + , , , , , , , ,999.489,964.153,1079.62,956.249,1033.82,1030.35,983.077,1021.84,1024.72,1095.59 + , , , , , , , ,1009.48,974.293,1093.26,951.652,1036.1,1023.45,973.784,1026.84,1034.28,1086.86 + , , , , , , , ,1014.6,971.186,1090.98,943.215,1042.02,1028.39,964.47,1020.94,1039.95,1085.28 + , , , , , , , ,1032.19,974.616,1102.72,937.717,1026.75,1045.79,960.324,1019.84,1041.18,1096.44 + , , , , , , , ,1031.4,980.29,1112.44,947.193,1013.26,1039.38,953.999,1010.07,1039.19,1097.12 + , , , , , , , ,1029.8,989.225,1121.43,938.68,1018.47,1037.49,934.593,1013.37,1051.26,1087.6 + , , , , , , , ,1041.93,983.932,1129.71,945.763,1015.96,1040.73,945.064,1021.23,1049.34,1083.77 + , , , , , , , ,1035.72,992.137,1112.69,951.682,1018.61,1040.4,924.817,1036.6,1030.88,1086.25 + , , , , , , , ,1037.13,981.612,1115.66,956.678,1025.26,1032.51,922.092,1045.51,1024.62,1080.26 + , , , , , , , ,1043.63,963.736,1116.26,971.953,1013.2,1046.84,923.963,1058.16,1012.79,1091 + , , , , , , , ,1062.97,970.393,1105.62,979.502,1020.57,1065.36,933.195,1052.18,981.981,1084.25 + , , , , , , , ,1066.66,979.068,1107.87,981.969,1014.92,1062.94,934.05,1053.75,963.58,1087.64 + , , , , , , , ,1067.21,977.012,1124,957.631,1023.47,1059.3,948.139,1056.8,953.052,1088.92 + , , , , , , , ,1070.48,965.715,1115.14,951.058,1010.03,1056.2,945.516,1059.47,939.272,1092.22 + , , , , , , , ,1082.07,957.141,1130.03,948.519,1003.01,1053.36,949.378,1050.14,940.906,1100.05 + , , , , , , , ,1092.8,949.892,1129.72,949.296,1012.73,1043.97,962.721,1042.28,941.018,1103.16 + , , , , , , , ,1083.56,957.124,1146.59,935.306,1004.54,1036.95,957.155,1031.13,935.321,1099.78 + , , , , , , , ,1069.81,957.581,1136.2,926.907,1024.3,1038.11,950.936,1032.64,946.511,1074.77 + , , , , , , , ,1070.96,971.023,1134.56,931.848,1019.1,1025.48,941.995,1038.56,958.178,1074.63 + , , , , , , , ,1076.47,976.972,1125.02,945.978,1031.52,1012,940.942,1065.46,955.59,1061.4 + , , , , , , , ,1084.42,970.09,1133.7,936.047,1024.89,1013.58,951.266,1063.35,958.812,1057.03 + , , , , , , , ,1083.12,954.639,1139.73,949.038,1016.5,1038.87,936.078,1065.08,954.829,1045.73 + , , , , , , , ,1084.38,958.918,1153.7,961.228,1029.96,1042.9,944.803,1068.97,951.423,1050.35 + , , , , , , , ,1078.35,940.467,1147.44,967.717,1032.21,1051.98,936.568,1068.57,936.059,1057.17 + , , , , , , , ,1080.13,939.431,1139,979.699,1031.5,1036.36,939.497,1068.06,917.021,1061.06 + , , , , , , , ,1078.76,943.806,1149.69,981.14,1022.82,1020.1,938.509,1077.57,927.315,1087 + , , , , , , , ,1071.45,926.834,1135.21,982.729,1022.52,1030.28,947.573,1058.89,927.995,1090.88 + , , , , , , , ,1077.77,936.062,1132.35,975.451,1030.38,1028.51,940.772,1051.85,948.115,1087.04 + , , , , , , , ,1069.15,945.54,1131.49,972.549,1032.45,1046.7,934.217,1053.53,952.824,1092.98 + , , , , , , , ,1080.36,933.566,1143.03,974.973,1040.11,1056.43,954.404,1063.86,968.853,1097.84 + , , , , , , , ,1082.54,929.595,1141.23,980.756,1038.82,1049.81,949.129,1057.59,976.92,1083.06 + , , , , , , , ,1077.24,936.732,1136.68,966.838,1045.12,1053.05,960.356,1067.23,965.251,1056.77 + , , , , , , , ,1068,937.084,1136.66,956.758,1023.44,1051.73,963.952,1064.99,958.739,1056.87 + , , , , , , , ,1065.99,934.714,1137.63,964.39,1018.21,1042.14,972.303,1073.5,958.415,1056.52 + , , , , , , , ,1054.64,946.484,1132.18,961.046,1018.5,1045.9,970.949,1081.44,964.776,1049.8 + , , , , , , , ,1053.33,947.064,1133.65,969.164,1021.9,1065.9,976.112,1080,977.929,1052.78 + , , , , , , , ,1045.65,942.575,1117.71,971.974,1019.58,1057.78,987.201,1080.77,987.564,1039.46 + , , , , , , , ,1035.95,937.359,1122.54,973.703,1009.55,1055.39,990.693,1090.33,996.139,1019.89 + , , , , , , , ,1028.92,942.699,1115.57,986.924,1005.28,1077.98,983.974,1102.21,1003.71,1025.72 + , , , , , , , ,1033.45,940.683,1118.11,995.025,996.398,1076.95,964.522,1100.54,1002.51,1024.52 + , , , , , , , ,1040.81,939.205,1123,1000.2,1006.46,1086.71,963.513,1106.99,1006.63,1022.19 + , , , , , , , ,1041.07,950.634,1138.08,1001.89,983.225,1087.92,979.011,1099.52,1029.25,1016.47 + , , , , , , , ,1037.86,934.708,1136.8,1011.7,970.454,1094.75,975.165,1094.36,1029.67,1019.38 + , , , , , , , ,1042.65,935.022,1159.12,1012.46,963.759,1105.76,983.962,1085.06,1028.09,1021.67 + , , , , , , , ,1047.72,929.463,1168.89,1001.84,973.658,1111.03,986.702,1077.94,1031.79,1022.2 + , , , , , , , ,1031.48,939.734,1175.67,1022.15,975.186,1100.26,973.466,1071.3,1019.3,1031.76 + , , , , , , , ,1036.89,947.256,1178.68,1020.28,965.884,1102.13,981.461,1062.73,1027.16,1045.18 + , , , , , , , ,1033.9,956.577,1172.21,1037.06,974.926,1096.99,982.906,1071.59,1037.76,1049.49 + , , , , , , , ,1046.94,969.1,1183.88,1024.6,966.999,1086.7,970.007,1060.91,1050.58,1042.77 + , , , , , , , ,1053.47,977.918,1198.47,1026.6,976.567,1074.56,970.626,1070.95,1055.81,1036.46 + , , , , , , , ,1030.18,993.382,1196.66,1031.87,981.159,1062.27,974.554,1071.88,1052.17,1043.72 + , , , , , , , ,1038.56,979.026,1200.77,1053.03,991.147,1046.93,974.519,1062.95,1066.03,1035.26 + , , , , , , , ,1044.91,978.605,1207.61,1064.28,995.293,1049.49,966.771,1066.7,1059.93,1041.96 + , , , , , , , ,1044.95,994.775,1210.78,1063.39,1004.9,1037.95,973.654,1060.21,1061.73,1039.22 + , , , , , , , ,1041.07,1015.08,1198.67,1063.14,1005.18,1058.36,987.579,1062.24,1068.11,1033.72 + , , , , , , , ,1024.83,990.372,1195.19,1077.5,1015.79,1054.11,991.506,1060.27,1062.9,1030.44 + , , , , , , , ,1029.27,989.877,1214.25,1077.29,1031.34,1055.08,990.796,1061.96,1064.94,1025.44 + , , , , , , , ,1032.66,1002.67,1219.02,1072.7,1033.49,1055.88,1001.35,1070.61,1051.26,1020.65 + , , , , , , , ,1021.25,987.048,1228.97,1089.4,1030.25,1050.61,1011.58,1074.46,1039.23,1031.45 + , , , , , , , ,1042.53,992.794,1239.64,1097.2,1027.24,1034.72,1032.67,1059.98,1039.74,1029.73 + , , , , , , , ,1042.77,997.746,1257.14,1094.29,1021.67,1047.07,1031.72,1055.75,1023.97,1018.23 + , , , , , , , ,1059,993.513,1255.66,1092.04,1021.29,1041.95,1023.13,1071.21,1018.97,1014.74 + , , , , , , , ,1052.15,1009.19,1262.96,1096.33,997.524,1056.25,1030.55,1077.76,994.075,1028.35 + , , , , , , , ,1055.45,1017.75,1262.3,1117.58,996.357,1069.38,1037.56,1075.1,1002.56,1033.76 + , , , , , , , ,1054.01,1017.91,1268.5,1120.09,1005.76,1058.59,1042.44,1075.39,1002.89,1040.82 + , , , , , , , ,1052.45,1011.67,1283.03,1116.81,1001.32,1057.27,1046.72,1088.51,1017.58,1026.51 + , , , , , , , ,1058.99,1015.17,1269.96,1104.06,986.8,1046.63,1058.67,1078.46,1026.71,1017.71 + , , , , , , , ,1059.9,1032.25,1283.85,1110.81,1004.61,1053.15,1077.52,1059.74,1017.18,1009.85 + , , , , , , , ,1047.23,1025.8,1290.91,1130.78,1015.1,1032.94,1076.72,1062.53,1025.65,1015.28 + , , , , , , , ,1046.94,1030.44,1300.38,1143.3,998.75,1025,1076.09,1058.73,1029.69,990.784 + , , , , , , , ,1046.25,1036.44,1299.01,1159.58,985.928,1008.7,1070.22,1058.7,1027.6,992.913 + , , , , , , , ,1059.37,1032.09,1293.18,1175.97,987.347,1017.86,1063.03,1040.88,1025.58,995.122 + , , , , , , , ,1069.43,1042.68,1291.7,1162.88,977.017,1038.46,1066.64,1050.63,1016.98,1001.09 + , , , , , , , ,1055.5,1042.42,1305.37,1185.07,960.723,1033.54,1059.57,1041.78,1012.63,1006.87 + , , , , , , , ,1055.16,1051.5,1298.65,1196.04,974.606,1033.22,1048.94,1036.98,1019.74,1020.35 + , , , , , , , ,1069.95,1045.44,1292.3,1194.96,978.568,1057.01,1047.15,1036.31,1021.24,1025.91 + , , , , , , , ,1063.26,1048.24,1284.82,1190.06,976.153,1064.16,1053.45,1040.46,1032.29,1030.58 + , , , , , , , ,1070.95,1044.44,1294.87,1174.88,992.033,1034.76,1048.01,1032.04,1028.31,1046.81 + , , , , , , , ,1069.97,1047.19,1310.23,1177.79,998.808,1052.51,1045.64,1032.82,1015.89,1034.98 + , , , , , , , ,1074.92,1046.74,1312.12,1185.38,1016.34,1059.19,1047.53,1038.97,1018.32,1029.35 + , , , , , , , ,1062.35,1036.24,1315.66,1186.87,1016.36,1055.12,1055.62,1048.6,1023.13,1021 + , , , , , , , ,1055.83,1036.09,1325.7,1201.12,1029.35,1053.93,1051.33,1045.13,1003.73,1027.19 + , , , , , , , ,1042.47,1043.86,1329.04,1194.92,1029.29,1030.53,1034.57,1038.55,1011.7,1025.92 + , , , , , , , ,1055.2,1062.75,1332.58,1208.61,1024.85,1039.8,1036.84,1050.33,1015.09,1026.65 + , , , , , , , ,1058.1,1070.44,1343.28,1221.83,1025.42,1034.19,1041.77,1044.56,1015.31,1022.98 + , , , , , , , ,1058.41,1060.78,1344.97,1213.57,1044.36,1046.75,1038.34,1043.14,1027.99,1041.08 + , , , , , , , ,1063.7,1065.3,1335.34,1220.55,1060.97,1051.14,1039.99,1034.5,1029.35,1042.58 + , , , , , , , ,1063.65,1058.84,1338.66,1213.65,1065.48,1049.3,1054.99,1033.78,1026.14,1043.02 + , , , , , , , ,1078.93,1056.51,1359.03,1221.78,1050.45,1043.22,1055.35,1037.77,1033.49,1050.53 + , , , , , , , ,1072.1,1066.35,1349.57,1238.74,1068.37,1044.89,1054.64,1049.3,1031.49,1053.58 + , , , , , , , ,1075.73,1066.19,1347.69,1230.81,1069.72,1038.58,1059.38,1036.31,1031.76,1052.64 + , , , , , , , ,1059.43,1059.34,1348.52,1234.15,1084.38,1053.08,1047.26,1038.47,1022.36,1055.65 + , , , , , , , ,1054.13,1075.55,1338.75,1238.71,1103.39,1047.52,1056.13,1041.35,1023.58,1071.46 + , , , , , , , ,1029.38,1082.23,1344.11,1241.59,1092.07,1049.89,1049.82,1039.89,1024.39,1072.07 + , , , , , , , ,1039.6,1075.71,1339.31,1248.02,1085.22,1045.67,1050.22,1024.15,1021.3,1081.31 + , , , , , , , ,1032.75,1071.61,1356.59,1262.9,1068.66,1036.15,1051.18,1007.29,1024.65,1085.03 + , , , , , , , ,1034.79,1053.81,1339.22,1264.88,1078.93,1025.5,1054.34,1010.24,1033.66,1085.18 + , , , , , , , ,1036.01,1048.44,1345.59,1248.7,1078.2,1035.59,1058.29,1007.28,1027.72,1080.27 + , , , , , , , ,1036.16,1040.54,1330.68,1246.36,1079.01,1030,1048.04,1008.46,1046.25,1080.59 + , , , , , , , ,1054.38,1051.84,1340.89,1250.05,1078.19,1022.75,1058.49,1003.16,1051.52,1068.57 + , , , , , , , ,1062.62,1050.26,1332.14,1241.64,1081.58,1037.56,1062.35,995.118,1038.42,1079.35 + , , , , , , , ,1037.45,1051.03,1328.85,1237.94,1098.37,1031.11,1063.76,991.682,1039.51,1083.89 + , , , , , , , ,1028.68,1031.19,1335.64,1222.84,1106.67,1024.8,1063.23,988.583,1061.99,1081.92 + , , , , , , , ,1041.15,1045.93,1354.04,1228.21,1093.29,1027.06,1064.58,980.224,1063.87,1081.38 + , , , , , , , ,1038.97,1053.96,1342.66,1223.65,1097.89,1037.82,1071.63,981.85,1082.14,1074.35 + , , , , , , , ,1055.96,1054.9,1355.1,1214.65,1089.85,1048.35,1073.81,971.549,1083.71,1062.52 + , , , , , , , ,1071.36,1059.34,1354.43,1218.1,1095.43,1061.9,1086.56,979.456,1083.46,1059.99 + , , , , , , , ,1081.15,1062.65,1357.18,1208.24,1083.02,1064.65,1102.36,973.864,1103.9,1091.47 + , , , , , , , ,1084.4,1062.57,1341.31,1216.87,1100.08,1061.86,1098.5,964.841,1089.65,1087.82 + , , , , , , , ,1089.69,1061.38,1331.4,1223.47,1104.16,1067.49,1102.25,959.055,1069.13,1080.28 + , , , , , , , ,1083.14,1074.81,1337.63,1225,1127.18,1065.99,1099.23,965.328,1074.24,1082.25 + , , , , , , , ,1092.13,1087.37,1345.62,1225.48,1138.13,1072.07,1096.65,945.515,1090.62,1086.05 + , , , , , , , ,1090.8,1088.83,1339.89,1210,1146.54,1069.45,1096.58,949.056,1095.89,1077.58 + , , , , , , , ,1076.82,1073.12,1348.56,1205.77,1149.77,1087.15,1097.15,934.364,1120.12,1072.74 + , , , , , , , ,1076.29,1064.08,1352.72,1206.75,1138.72,1097.12,1080.71,924.81,1118.21,1072.32 + , , , , , , , ,1081.81,1064.26,1355.24,1214.97,1148.39,1096.07,1080.19,927.298,1131.79,1061.11 + , , , , , , , ,1082.65,1066.52,1355.81,1212.05,1138.32,1104.87,1063.6,935.432,1140.86,1062.25 + , , , , , , , ,1062.04,1073.03,1363.28,1225.29,1133.47,1097.48,1064.65,928.816,1151.65,1078.87 + , , , , , , , ,1069.28,1071.46,1374.44,1213.43,1154.88,1115.1,1058.42,918.867,1145.96,1091.42 + , , , , , , , ,1058.12,1066.56,1355.47,1211.64,1147.53,1114.33,1063.3,920.943,1153.83,1087.74 + , , , , , , , ,1053.79,1081.08,1371.43,1219.11,1156.09,1129.8,1076.03,925.25,1141.11,1084.04 + , , , , , , , ,1053.64,1075.07,1380.4,1229.62,1152.69,1116.65,1079.19,926.855,1141.88,1096.87 + , , , , , , , ,1058.05,1053.61,1381.11,1225.86,1131.28,1093.38,1067.89,939.674,1128.92,1104.42 + , , , , , , , ,1072.99,1047.73,1380.79,1227.5,1134.71,1095.42,1060.75,935.931,1120.57,1109.42 + , , , , , , , ,1079.34,1039.04,1370.22,1214.78,1139.36,1089.14,1042.34,953.05,1127.66,1109.23 + , , , , , , , ,1083.92,1051.8,1360.28,1201.06,1149.23,1093.42,1047.15,933.611,1121.77,1094.05 + , , , , , , , ,1093.42,1054.61,1355.14,1209.79,1140.97,1094.81,1038.03,943.467,1127.98,1093.03 + , , , , , , , ,1077.54,1062.72,1347.25,1189.61,1148.18,1077.39,1029.86,958.041,1123.44,1093.36 + , , , , , , , ,1073.63,1054.32,1338.77,1200.71,1143.81,1067.29,1039.45,952.807,1114.47,1086.92 + , , , , , , , ,1059.86,1057.49,1345.99,1206.59,1158.27,1052.93,1038.09,954.199,1118.08,1091.35 + , , , , , , , ,1045.85,1066.34,1349.84,1222.15,1162.5,1050.29,1041.53,964.131,1117.27,1082.85 + , , , , , , , ,1055.07,1072.06,1331.31,1204.36,1170.39,1054.38,1044.92,946.249,1117.47,1094.53 + , , , , , , , ,1052.51,1068.91,1334.25,1224.9,1157.74,1058.42,1068.46,955.008,1134.15,1095.38 + , , , , , , , ,1053.06,1068.64,1335.71,1241.88,1157.89,1038.28,1068.65,951.529,1126.08,1091.1 + , , , , , , , ,1040.74,1060.72,1340.24,1245.22,1163.96,1030.29,1069.3,941.827,1126.9,1084.37 + , , , , , , , ,1040.01,1050.43,1329.69,1232.95,1160.51,1021.2,1050.79,958.344,1130.01,1084.57 + , , , , , , , ,1040.4,1051.67,1338.95,1221.86,1157.15,1021.86,1051.76,960.686,1132.31,1089.18 + , , , , , , , ,1040.71,1037.58,1332.3,1219.06,1154.99,1021.26,1032.4,951.696,1120.82,1092.93 + , , , , , , , ,1051.2,1024.94,1332.3,1215.89,1161.43,1021.85,1022.19,930.144,1140.01,1112.88 + , , , , , , , ,1042.94,1023.31,1330.38,1223.47,1161.7,1027.52,1030.32,937.209,1143.99,1117.52 + , , , , , , , ,1034.83,1029.49,1330.84,1243.6,1170.45,1029.04,1032.12,931.021,1159.39,1124.7 + , , , , , , , ,1027.21,1037.04,1325.22,1245.07,1179.7,1021.18,1031.16,936.197,1175.11,1140.39 + , , , , , , , ,1035.89,1040.33,1314.09,1245.82,1182.19,1022.13,1025.38,924.911,1162.75,1138.93 + , , , , , , , ,1005.39,1028.33,1321.66,1242.54,1185.64,1038.11,1022.55,933.688,1166.3,1149.02 + , , , , , , , ,999.56,1035.56,1316.64,1242.67,1177.94,1027.6,1029.47,929.937,1164.25,1140.68 + , , , , , , , ,997.757,1028.12,1312.03,1237.59,1155.75,1026.55,1007.1,947.477,1174.7,1139.25 + , , , , , , , ,1019.84,1027.24,1304.47,1247.58,1151.48,1043.48,1001.3,945.236,1176.47,1132.51 + , , , , , , , ,1037.06,1021.61,1287.63,1247.95,1162.5,1056.28,1000.67,939.254,1156.57,1123.97 + , , , , , , , ,1039.61,1001.17,1278.98,1247.76,1140.2,1052.12,1012.43,944.385,1164.38,1112.81 + , , , , , , , ,1043.52,1005.17,1271.96,1249.75,1145.87,1046.88,1018.5,955.163,1169.5,1110.5 + , , , , , , , ,1040.34,1010.58,1262.45,1241,1139.65,1047.55,1011.03,966.155,1169.89,1116.25 + , , , , , , , ,1038.37,1002.03,1262.81,1245.51,1136.14,1050.69,997.442,967.7,1181.01,1110.91 + , , , , , , , ,1032.44,1000.99,1265.57,1227.96,1150.17,1043.09,994.616,968.004,1189.07,1100.13 + , , , , , , , ,1003.54,1000.98,1273.19,1244.36,1146.26,1041.01,975.396,954.789,1179.18,1110.94 + , , , , , , , ,1005.68,1007.23,1280.87,1249.04,1139.72,1046.42,975.432,935.993,1174.36,1108.6 + , , , , , , , ,1010.11,1003.7,1260.28,1236.99,1149.27,1054.05,975.808,931.441,1190.24,1099.15 + , , , , , , , ,1003.52,1001.82,1253.17,1247.81,1155.81,1084.9,982.549,932.313,1203.02,1097.97 + , , , , , , , ,1005.34,1004.58,1239.33,1248.61,1164.7,1085.98,989.005,943.021,1205.79,1086.66 + , , , , , , , ,1020.07,991.088,1230.92,1234.63,1174.71,1083.08,992.127,962.644,1212.54,1085.55 + , , , , , , , ,1020.9,966.568,1219.82,1226.99,1185.49,1072.62,978.361,952.542,1222.53,1095.19 + , , , , , , , ,1013.68,953.104,1235.46,1230.72,1199.1,1062.04,991.746,957.847,1223.44,1096.32 + , , , , , , , ,998.501,956.936,1239.67,1230.84,1190.6,1058.1,1002.22,965.45,1230.29,1100.76 + , , , , , , , ,995.74,968.731,1240.01,1234.32,1194.44,1061.83,1015.39,967.401,1222.9,1100.83 + , , , , , , , ,996.983,968.615,1229.9,1235.83,1188.16,1066.93,1018.79,991.859,1231.93,1100.79 + , , , , , , , ,1008.3,963.357,1242.09,1235.32,1180.65,1074.36,1021.88,983.277,1215.99,1105.32 + , , , , , , , ,1006.13,974.43,1237.61,1255.01,1197.6,1066.33,1011.65,976.376,1222.5,1105.61 + , , , , , , , ,1008.45,978.513,1239.63,1236.83,1204.51,1063.31,1016.61,953.976,1218.57,1097.57 + , , , , , , , ,1003.49,995.542,1248.23,1244.59,1203.54,1050.01,1014.12,961.495,1235.22,1111.55 + , , , , , , , ,1015.79,1006.68,1244.17,1253.43,1190.58,1054.23,1015.8,933.678,1218.51,1121.48 + , , , , , , , ,1022.9,1011.78,1247.75,1240.94,1193.29,1059.03,1005.32,945.152,1218.99,1130.77 + , , , , , , , ,1035.96,1007.87,1240.39,1236.87,1198.31,1067.92,1006.93,945.107,1215.95,1124.02 + , , , , , , , ,1043.18,992.635,1249.71,1251.74,1199.12,1054.69,1004.18,950.457,1216.78,1098.54 + , , , , , , , ,1046.51,978.681,1245.89,1259.39,1213.94,1043.67,1007.28,944.46,1213.13,1100.98 + , , , , , , , ,1055.01,961.999,1245,1262.55,1218.03,1057.24,1013.64,948.75,1220.93,1106.36 + , , , , , , , ,1031.01,976.579,1242.07,1254.11,1229.3,1051.75,1008.49,945.495,1238.49,1099.3 + , , , , , , , ,1040.84,974.441,1251.32,1265.28,1232.19,1064.13,1008.14,944.77,1234.1,1107.67 + , , , , , , , ,1022.38,975.143,1244.73,1256.35,1225.48,1060.47,1020.84,943.507,1225.63,1086.24 + , , , , , , , ,1021.1,980.593,1236.7,1252.59,1225.81,1064.36,1033.02,937.785,1232.09,1106.74 + , , , , , , , ,1031.26,970.861,1236.37,1272.02,1205.98,1074.12,1027.22,939.368,1245.89,1104.88 + , , , , , , , ,1045.79,967.728,1235.54,1270.83,1206.22,1084.39,1039.21,935.726,1252.15,1106.41 + , , , , , , , ,1041.68,984.382,1240.61,1272.9,1213.9,1086.85,1031.68,927.877,1257.75,1109.71 + , , , , , , , ,1033.46,989.66,1244.54,1268.75,1216.31,1102.32,1044.89,943.662,1248.57,1112.87 + , , , , , , , ,1036.85,998.852,1228.02,1281.11,1214.68,1094.18,1044.33,960.542,1243.86,1111.01 + , , , , , , , ,1037.29,998.195,1213.67,1285.9,1218.16,1075.69,1053.8,968.566,1251.45,1099.93 + , , , , , , , ,1016.71,1011.46,1204.38,1273.38,1213.68,1078.27,1042.48,967.698,1260.71,1090.67 + , , , , , , , ,1030.82,1020.65,1218.41,1289.8,1204.03,1080.57,1044.86,970.36,1260.98,1088.97 + , , , , , , , ,1037.7,1038.01,1213.03,1296.53,1202.04,1091.55,1053.72,960.155,1271.53,1086.51 + , , , , , , , ,1054.56,1033.48,1230.21,1269.28,1188.88,1100.5,1049.68,980.564,1270.33,1085.84 + , , , , , , , ,1056.32,1023.72,1226.2,1272.45,1181.85,1095.06,1032.32,982.997,1271.98,1082.45 + , , , , , , , ,1068.96,1014.78,1236.15,1277.9,1205.34,1100.94,1036.32,995.164,1273.14,1084.86 + , , , , , , , ,1061.87,1043.12,1233.61,1282.67,1195.99,1112.72,1035,993.381,1282.83,1082.23 + , , , , , , , ,1066.17,1032.93,1217.17,1271.58,1197.03,1105.02,1023.19,999.231,1266.23,1082.91 + , , , , , , , ,1061.24,1032.51,1227.49,1278.93,1177.75,1096.45,1026.61,1014.49,1262.32,1085.85 + , , , , , , , ,1063.04,1036.53,1227.77,1277.22,1161.03,1080.48,1016.57,998.947,1279.57,1084.58 + , , , , , , , ,1084.59,1037.1,1227.27,1288.34,1166.75,1079.48,1014.32,1009.78,1286.3,1085.97 + , , , , , , , ,1095.79,1052.82,1233,1287.31,1164.03,1085.46,1034.07,1014.78,1296.53,1108.94 + , , , , , , , ,1104.56,1051.59,1230.42,1283.48,1144.63,1081.15,1044.43,1019.4,1304.02,1100.94 + , , , , , , , ,1101.45,1043.28,1224.48,1286.04,1128.43,1096.84,1048.05,1015.02,1293.58,1120.23 + , , , , , , , ,1090.83,1052.91,1217.16,1301.9,1110.93,1103.58,1045.75,1004.19,1275.82,1102.66 + , , , , , , , ,1095.24,1056.1,1211.74,1307.93,1110.64,1099.71,1045.7,1015.15,1280.82,1107.46 + , , , , , , , ,1100.31,1067.04,1211.53,1298.36,1097.25,1089.81,1047.73,1006.27,1288.02,1099.95 + , , , , , , , ,1111.86,1083,1208.65,1310.13,1105,1077.77,1040.02,1001.45,1287.64,1108.91 + , , , , , , , ,1118.2,1091.92,1212.62,1326.1,1125.09,1091.85,1034.45,1004.17,1279.98,1107.49 + , , , , , , , ,1147.04,1098.53,1200.09,1330.12,1125.31,1106.68,1048.97,1017.26,1285.73,1090.73 + , , , , , , , ,1167.23,1089.95,1199.61,1339.75,1115.59,1113.75,1062.51,992.441,1292.97,1085.17 + , , , , , , , ,1172.09,1088.57,1204.63,1347.26,1111.52,1120.44,1059.6,992.592,1274.61,1086.3 + , , , , , , , ,1171.39,1093.62,1217.12,1343.33,1108.37,1125.53,1061.83,996.059,1287.07,1102.12 + , , , , , , , ,1169.36,1099.18,1210.3,1347.76,1111.05,1141.16,1053.84,982.446,1293.84,1096.09 + , , , , , , , ,1169.48,1087.38,1228.18,1361.91,1105.8,1138.81,1047.75,986.314,1290.13,1094 + , , , , , , , ,1167.54,1086.59,1227.06,1355.21,1108.12,1151.05,1032.75,1001.14,1279.49,1102.48 + , , , , , , , ,1170.44,1094.05,1229.14,1363.26,1099.82,1148.19,1046.21,1002.04,1288.4,1096.55 + , , , , , , , ,1171.3,1095.46,1230.24,1358.83,1080.29,1129.72,1038.43,1010.67,1270.45,1105.01 + , , , , , , , ,1157.29,1096.8,1233.96,1341.9,1072.63,1124.03,1046.91,1020.97,1257.23,1093.05 + , , , , , , , ,1158.96,1115.04,1220.58,1337.79,1085.52,1131.29,1031.34,1006.84,1251.79,1076.63 + , , , , , , , ,1156.7,1112.54,1233.7,1351.32,1083.01,1149.59,1035.12,996.401,1247.81,1070.57 + , , , , , , , ,1159.08,1121.44,1227,1356.45,1084.19,1155.19,1052.39,1001.09,1256.28,1062.35 + , , , , , , , ,1158.79,1123.55,1233.88,1359.09,1086.17,1154.59,1049.89,985.053,1267.4,1076.21 + , , , , , , , ,1155.08,1115.95,1223.15,1359.54,1087.86,1151.39,1044.76,987.582,1271.8,1079.76 + , , , , , , , ,1142.86,1125.72,1211.92,1365.51,1085.07,1153.25,1048.02,1000.49,1273.9,1097.87 + , , , , , , , ,1145.71,1105.46,1217.83,1346.13,1089.86,1155.82,1037.61,1001.99,1270.56,1109.83 + , , , , , , , ,1144.27,1096.59,1221.96,1348.28,1098.15,1154.2,1051.16,997.771,1274.84,1108.13 + , , , , , , , ,1151.28,1091.7,1217.48,1351.9,1114.08,1149.83,1055.11,1004.8,1276.85,1116.04 + , , , , , , , ,1143.29,1101.51,1215.63,1372.13,1108.49,1145.2,1054.38,1018.76,1280.97,1112.26 + , , , , , , , ,1155.18,1095.2,1209.75,1350.68,1119.26,1133.27,1067.24,1015.38,1259.28,1094.55 + , , , , , , , ,1151.2,1102.79,1207.41,1340.26,1109.78,1144.13,1050.57,1022.59,1269.29,1092.24 + , , , , , , , ,1157.14,1102.92,1189.16,1336.12,1129.3,1153.51,1047.43,1016.94,1259.39,1084.44 + , , , , , , , ,1158.09,1107.6,1192.64,1351.61,1127.91,1157.09,1065.51,1022.69,1260.08,1089.74 + , , , , , , , ,1174.33,1099.77,1187.34,1339.18,1107.84,1162.94,1060.33,1028.39,1271.25,1090.24 + , , , , , , , ,1183.71,1094.58,1193.77,1326.82,1109.32,1160.25,1061.76,1018.09,1254.65,1079.45 + , , , , , , , ,1178.04,1111.9,1195.57,1319.1,1106.23,1136.93,1060.02,1028.27,1251.64,1091.81 + , , , , , , , ,1177.83,1113.25,1204.88,1304.44,1095.38,1152.04,1076.08,1029.48,1256.48,1093.64 + , , , , , , , ,1180.6,1104.67,1176.81,1315.34,1105.05,1141.31,1096.76,1038.61,1246,1108.58 + , , , , , , , ,1158.46,1099.79,1193.24,1306.97,1104.37,1143.68,1102.86,1036.82,1239.62,1099.31 + , , , , , , , ,1155.07,1097.42,1188.12,1308.4,1111.19,1146.47,1122.64,1036.44,1245.83,1083.98 + , , , , , , , ,1157.07,1090.29,1198.04,1309.6,1110.07,1145.76,1115.63,1039.04,1253.22,1074.42 + , , , , , , , ,1155.39,1101.81,1210.32,1324,1108.52,1156.68,1129.36,1042.93,1262.78,1076.59 + , , , , , , , ,1153.33,1097.61,1193.56,1323.39,1115.33,1163.58,1119.24,1043.74,1268.75,1084.25 + , , , , , , , ,1135.17,1101.42,1191.69,1330.42,1106.41,1164.61,1100.14,1032.56,1267.86,1097.62 + , , , , , , , ,1125.58,1106.51,1190.52,1341.46,1085.81,1167.84,1105.8,1033.67,1263.57,1113.07 + , , , , , , , ,1128.76,1117.58,1194.19,1349.71,1104.46,1161.84,1102.86,1031.69,1286.08,1111.73 + , , , , , , , ,1125.03,1120.7,1195.49,1356.65,1108.36,1156.59,1112.17,1022.28,1284.9,1107.08 + , , , , , , , ,1106.28,1125.59,1200.07,1352.05,1111.88,1160.2,1116.69,1031.74,1277.32,1105.73 + , , , , , , , ,1103.11,1117.28,1203.87,1352.41,1124.28,1163.82,1135.35,1030.37,1282.35,1100.44 + , , , , , , , ,1094.15,1121.79,1210.05,1345.1,1114.87,1145.16,1112.87,1033.01,1296.4,1110.79 + , , , , , , , ,1086.74,1115.7,1191.59,1368.5,1103.88,1116.13,1113.11,1033.03,1312.79,1123.65 + , , , , , , , ,1087.62,1128.07,1200.46,1367.55,1108.04,1118.54,1124.68,1025.9,1296.35,1122.71 + , , , , , , , ,1070.44,1142.06,1196.79,1374.26,1110.54,1101.75,1128.39,1028.56,1275.69,1124.68 + , , , , , , , ,1069.23,1145.19,1203.55,1388.85,1101.5,1102.94,1122.89,1026.59,1279.97,1141.31 + , , , , , , , ,1082.38,1132.08,1198.4,1375.76,1110.08,1110,1115.34,1030.19,1276.77,1156.35 + , , , , , , , ,1077.06,1136.85,1194.69,1362.52,1100.4,1113.23,1114.45,1034.75,1269.46,1155.64 + , , , , , , , ,1078.99,1124.75,1205.41,1366.53,1107.71,1113.71,1109.06,1039.17,1258.67,1149.15 + , , , , , , , ,1095.02,1130.36,1196.36,1358.48,1104.01,1108.15,1101.76,1037.52,1263.01,1146.68 + , , , , , , , ,1080.09,1137.45,1182.69,1376.01,1117.33,1116.85,1110.27,1018.41,1257.11,1155.83 + , , , , , , , ,1081.39,1135.63,1184.21,1377.88,1111.2,1123.06,1118.74,1013.27,1261.15,1163.01 + , , , , , , , ,1092.75,1124.99,1184.93,1367.27,1116.64,1118.06,1112.81,1016.49,1259.52,1156.03 + , , , , , , , ,1108.79,1118.81,1173.94,1354.02,1118.92,1119.22,1114.91,1007.96,1253.71,1149.46 + , , , , , , , ,1120.32,1112.15,1175.84,1353.51,1118.23,1113.7,1107.09,1027.46,1254.6,1156.36 + , , , , , , , ,1123.49,1100.39,1185.58,1357.87,1138.07,1103.68,1098.72,1031.18,1250.48,1157.28 + , , , , , , , ,1124.99,1089.37,1175.26,1351.82,1116.4,1094.83,1094.26,1027,1250.24,1145.88 + , , , , , , , ,1118.46,1088.18,1190.09,1341.58,1115.12,1085.15,1086,1043.61,1243.54,1152.36 + , , , , , , , ,1108,1071.56,1194.09,1348.15,1121.38,1105.61,1095.61,1048.79,1242.4,1143.5 + , , , , , , , ,1104.25,1083.47,1192.61,1348.61,1131.24,1104.36,1078.72,1032.03,1235.77,1134.22 + , , , , , , , ,1116.62,1077.3,1209.22,1355.2,1108.66,1099.29,1077.58,1035.66,1243.88,1135.42 + , , , , , , , ,1096.85,1068.08,1224.74,1339.45,1101.17,1085.06,1083.47,1044.71,1243.73,1127.45 + , , , , , , , ,1100.9,1056.74,1230.7,1329.01,1093.88,1080.46,1092.28,1039.04,1270,1120.53 + , , , , , , , ,1091.22,1069.7,1223,1327.34,1101.18,1079.22,1089.58,1035.46,1260.75,1147.29 + , , , , , , , ,1091.06,1085.16,1214.56,1340.62,1124.58,1087.02,1115.45,1029.46,1252.93,1140.05 + , , , , , , , ,1093.29,1086.03,1232.48,1343.83,1108.04,1090.15,1101.96,1027.63,1262.11,1151.57 + , , , , , , , ,1083.3,1105.48,1239.87,1361.59,1101.85,1092.05,1085.99,1038.14,1262.54,1154.7 + , , , , , , , ,1075.94,1099.22,1249.43,1351.49,1106.13,1097.74,1084.96,1051.05,1271.95,1154.37 + , , , , , , , ,1055.16,1093.91,1258.45,1347.74,1101.62,1083.3,1090.79,1058.73,1272.4,1154.37 + , , , , , , , ,1065.19,1084.85,1251.13,1329.99,1105.64,1091.77,1101.31,1066.96,1269.27,1143.16 + , , , , , , , ,1048.28,1069.21,1258.13,1340.66,1101.92,1107.41,1109.89,1076.89,1278.5,1134.6 + , , , , , , , ,1047.87,1078.88,1268.69,1355,1102.75,1116.03,1109.55,1089.42,1282.85,1134.97 + , , , , , , , ,1050.26,1068.08,1257.44,1358.85,1102.96,1119.61,1104.28,1101.64,1268.34,1149.83 + , , , , , , , ,1067.16,1077.07,1241.55,1358.99,1117.85,1115.14,1099.57,1116.98,1266.25,1138.92 + , , , , , , , ,1076.23,1074,1242.79,1372.9,1123.05,1117.15,1100.02,1111.11,1266.28,1142.63 + , , , , , , , ,1076.87,1058.16,1246.9,1363.28,1137.98,1114.75,1100.72,1118.18,1258.08,1148.21 + , , , , , , , ,1073.4,1059.86,1249.1,1367.78,1135.39,1108.01,1093.18,1131.96,1240.99,1160.18 + , , , , , , , ,1072.1,1073.55,1246.33,1369.99,1123.07,1101.65,1090.32,1128.12,1215.82,1145.28 + , , , , , , , ,1078.52,1081.3,1241.82,1362.76,1122.8,1116.35,1090.12,1129.31,1210.37,1155.01 + , , , , , , , ,1086.03,1077.94,1234.78,1349.3,1110.68,1111.4,1085.11,1113.36,1214.14,1146.68 + , , , , , , , ,1067.25,1079.15,1240.54,1349.65,1112.38,1114.14,1086.23,1124.65,1223.03,1142.65 + , , , , , , , ,1077.9,1082.11,1253.25,1347.3,1107.68,1106.96,1093.55,1117.02,1229.68,1145.93 + , , , , , , , ,1089.74,1070.4,1243.84,1351.04,1096.63,1117.3,1105.14,1118.92,1238.76,1159.5 + , , , , , , , ,1086.86,1070.26,1240.67,1348.58,1104.24,1135.11,1117.72,1133.45,1238.34,1157.95 + , , , , , , , ,1072.9,1057.52,1247.2,1331.31,1109.3,1137.7,1091.49,1136.29,1234.32,1166.5 + , , , , , , , ,1055.28,1058.84,1262.8,1343.38,1122.02,1117.63,1109.35,1126.02,1242.67,1176.95 + , , , , , , , ,1054.52,1062.11,1281.38,1329.85,1111.05,1131.1,1109.63,1137.68,1251.83,1169.77 + , , , , , , , ,1051.57,1051.38,1275.71,1339.34,1115.37,1138.09,1104.83,1148.46,1256.48,1165.61 + , , , , , , , ,1042.7,1058.94,1275.53,1359.32,1104.7,1130.59,1092.46,1160.69,1242.66,1151.45 + , , , , , , , ,1050.29,1058.52,1273.1,1370.83,1104.71,1136.52,1085.6,1170.12,1246.99,1148.99 + , , , , , , , ,1061.49,1047.31,1276.23,1355.34,1105.68,1129.72,1079.66,1170.6,1259.61,1125.12 + , , , , , , , ,1066.18,1037.07,1258.71,1352.29,1105.04,1126.2,1085.5,1184.44,1266.77,1126.85 + , , , , , , , ,1071.77,1039.59,1263.81,1354.6,1108.83,1130.11,1100.24,1179.27,1278.63,1131.52 + , , , , , , , ,1056.95,1026.84,1264.46,1370.59,1110.47,1121.22,1112.79,1180.09,1275.45,1131.07 + , , , , , , , ,1060.35,1032.86,1282.84,1372.4,1119.09,1116.24,1096.62,1179.61,1263.39,1133.34 + , , , , , , , ,1049.95,1008.1,1276.02,1367.85,1128.76,1110.56,1087.71,1178.88,1285.77,1134.67 + , , , , , , , ,1030.53,1003.22,1269.39,1377.34,1128,1112.79,1082.25,1169.7,1285.25,1150.89 + , , , , , , , ,1025.81,990.465,1260.85,1389.3,1122.35,1105.91,1078.68,1159.38,1285.03,1145.13 + , , , , , , , ,1023.47,982.857,1258.55,1394,1120.74,1101.04,1090.1,1160.78,1288,1139.6 + , , , , , , , ,1012.1,976.627,1253.5,1408.94,1112.43,1091.54,1099.25,1167.44,1267.03,1131.75 + , , , , , , , ,1002.9,960.686,1252.03,1415.23,1099.48,1089.58,1087.72,1170.95,1259,1128.34 + , , , , , , , ,994.865,949.228,1263.07,1413.85,1089.27,1096.22,1084.54,1175.8,1265.67,1143.4 + , , , , , , , ,984.99,959.733,1255.9,1411.82,1081.26,1089.14,1097.87,1173.56,1250.25,1146.73 + , , , , , , , ,971.371,963.707,1259.65,1416.84,1085.13,1073.1,1089.25,1172.54,1262.73,1155.85 + , , , , , , , ,959.611,967.092,1252.53,1425.61,1086.33,1075.43,1082.74,1185.54,1257.36,1153.29 + , , , , , , , ,959.34,987.399,1247.17,1431.64,1085.64,1065.62,1091.07,1185.55,1271.15,1150.22 + , , , , , , , ,963.632,993.426,1247.11,1429.45,1094.78,1073.71,1093.58,1191.69,1271.56,1173.31 + , , , , , , , ,964.042,1003.57,1239.67,1430.02,1087.89,1072.45,1090.35,1180,1268.29,1165.64 + , , , , , , , ,967.259,989.237,1244.61,1427.1,1086.02,1073.59,1081.15,1173.91,1261.71,1163.79 + , , , , , , , ,970.338,995.572,1235.75,1423.11,1083.94,1079.64,1072.41,1192.64,1256.93,1175.23 + , , , , , , , ,977.076,1006.56,1247.24,1410.01,1069.47,1092.39,1071.61,1205.59,1262.29,1185.06 + , , , , , , , ,961.417,1014.13,1246.62,1387.65,1061.66,1093.01,1072.04,1222.95,1271.58,1178.59 + , , , , , , , ,968.946,1016.74,1256.24,1382.92,1048.06,1074.4,1077.07,1195.2,1282.51,1170.51 + , , , , , , , ,964.131,1011.75,1258.81,1386.45,1033.78,1074.44,1084.14,1196.88,1286.11,1168.8 + , , , , , , , ,949.887,1028.39,1273.45,1385.4,1030.68,1076,1097.28,1190.99,1297.83,1163.2 + , , , , , , , ,955.553,1013.42,1268.39,1412.85,1024.95,1059.75,1097.04,1217.14,1299.66,1154.18 + , , , , , , , ,943.399,1022.44,1274.34,1436.84,1021.15,1042.84,1101.41,1209.11,1290.66,1168.5 + , , , , , , , ,946.832,1020.26,1274.77,1434.3,1020.68,1049.48,1100.29,1198.69,1283.51,1164.47 + , , , , , , , ,948.282,1017.52,1279.11,1446.79,1018.71,1049.89,1096.52,1182.68,1280.58,1159.96 + , , , , , , , ,952.115,1015.17,1285.93,1439.23,1018.32,1049.05,1095.07,1192.38,1277.72,1161.06 + , , , , , , , ,965.228,1017.9,1274.39,1432.65,1024.28,1044.09,1101.85,1209.01,1282.01,1160.76 + , , , , , , , ,954.353,1029.39,1289.87,1414.58,1040.5,1051.38,1087.27,1216.68,1302.26,1151.41 + , , , , , , , ,958.648,1036.69,1305.66,1405.44,1047.28,1037.81,1104.36,1226.63,1296.6,1159.11 + , , , , , , , ,955.12,1047.63,1309.14,1389.81,1047.19,1021.02,1104.08,1219.89,1310.91,1170.75 + , , , , , , , ,953.904,1045.7,1315.38,1369.83,1047.62,1031.15,1088.83,1231.09,1313.76,1171.78 + , , , , , , , ,954.051,1053.49,1314.6,1378.63,1047.62,1026.53,1095.12,1245.11,1306.01,1174.31 + , , , , , , , ,945.647,1060.72,1306.56,1359.52,1055.31,1030.97,1110.99,1257.29,1299.6,1174.73 + , , , , , , , ,957.919,1070.31,1306.17,1374.35,1063.47,1030.65,1108.15,1255.98,1304.84,1166.88 + , , , , , , , ,950.499,1063.45,1313.31,1379.59,1038.63,1041.67,1108.92,1249.92,1303.11,1167.64 + , , , , , , , ,945.741,1067.86,1316.68,1362.33,1029.08,1043.67,1109.45,1237.26,1311.44,1157.17