#include "StockMarket.h" #include "Stock.h" #include "Investor.h" #include "SimpleBuyStrategy.h" #include "SmartBuyStrategy.h" #include "SimpleSellStrategy.h" #include "RandomBuyStrategy.h" #include "RandomSellStrategy.h" #include "StopLossStrategy.h" #include "CompositeBuyStrategy.h" #include "TaskManager.h" #include int main() { StockMarket nasdaq; Stock msft( "MSoft", 4.0); // Stock yhoo( "Yahoo", 4.0 ); nasdaq.add( &msft ); // nasdaq.add( &yhoo ); msft.setPrice( 5.0 ); // yhoo.setPrice( 5.0 ); vector investors; const unsigned int numberOfInvestors = 200; for( int k = 0; k < numberOfInvestors; k++ ) investors.push_back( Investor( 100000, &nasdaq ) ); const unsigned int initialBuyers = 100; for ( int j = 0; j < initialBuyers; j ++ ) { investors[j].buy( &msft, msft.price(), 20000 ); } for( vector::iterator i = investors.begin(); i != investors.end(); i++ ) i->print(); for( vector::iterator i = investors.begin(); i != investors.end(); i++ ) { CompositeBuyStrategy * strategy = new CompositeBuyStrategy; strategy->add( new StopLossStrategy ( 0.20 + drand48()*0.30 ) ); strategy->add( new RandomBuyStrategy ( 0.05 + drand48()*0.15, 0.05 + drand48()*0.015, 0.02 + drand48()*0.48 ) ); strategy->add( new RandomSellStrategy( 0.002 + drand48()*0.003, 0.05 + drand48()*0.015, 0.02 + drand48()*0.48 ) ); strategy->add( new SmartBuyStrategy ( 3, 0.010 + drand48()*0.020, 0.3 + drand48()*0.7 ) ); strategy->add( new SimpleBuyStrategy ( 1, 0.005 + drand48()*0.015, 0.3 + drand48()*0.7 ) ); strategy->add( new SimpleSellStrategy( 0.1 + drand48()*0.20 ) ); i->setBuyStrategy( strategy ); } TaskManager manager; for( vector::iterator i = investors.begin(); i != investors.end(); i++ ) manager.add( &*i ); manager.add( &nasdaq ); const unsigned int numberOfTasks = numberOfInvestors + 1; const unsigned int numberOfTransactions = 5000; const unsigned long iterations = (unsigned long)( numberOfTasks ) * (unsigned long)(numberOfTransactions); for( unsigned long i = 0; i < iterations ; i++ ) manager.doTask(); for( vector::iterator i = investors.begin(); i != investors.end(); i++ ) i->print(); }