def __init__(self): # Initialize storage for market performance self.div_ratio, self.pr_ratio = [], [] self.div_periods, self.pr_periods = [[], [], [], [], []], [[], [], [], [], []] self.div_mas, self.pr_mas = [[], [], [], []], [[], [], [], []] self.poor_performers, self.good_performers = [], [] # Initialize model parameters self.model_params = {} self.__load_model_params__() self.prob_int_rate_change = self.model_params.get('prob_int_rate') self.int_rate = self.model_params.get('int_rate') self.min_int_rate = self.model_params.get("min_rate") self.max_int_rate = self.model_params.get("max_rate") # Initialize conditions self.conditions = Conditions.ConditionList() self.__load_conditions__() # Initialize forecast parameters self.forecast_params = {} self.__load_forecast_params__() # Initialize market mechanics self.Mechanics = MarketMechanics.Mechanics(self.model_params, self.conditions) self.__set_world_values__() # Store initial dividend and price self.init_dividend = self.Mechanics.__get_dividend__ self.init_asset_price = self.Mechanics.__get_price__ self.dividend_value = self.init_dividend self.price = self.init_asset_price # Initialize population space self.population = [] self.risk_aversion_list = self.__gen_risk_dist__() self.__set_agent_values__() # Initialize market-maker self.specialist = Specialist.MarketClearer() self.__set_specialist_values__() # Clock self.curr_time = 0 self.time_duration = int(self.model_params['time_duration']) self.warm_up_time = int(self.model_params['warm_up_time']) # bailout flag self.already_bailed = False # Changing Interest Rate self.dynamic_interest = self.model_params['dynamic_interest'] # variables for graphs self.mistakes_made = 0 self.agents_learned = 0 self.animated_graph_save = self.model_params['animated_graph_saving'] self.image_graph_save = self.model_params['image_graph_saving'] self.averages = { 'avg_wealth': 0, 'avg_pos': 0, 'avg_cash': 0, 'avg_profit': 0 } # graphs self.market_graphs = Graph.MarketGraphs(self.time_duration, self.animated_graph_save, self.image_graph_save) self.price_ma_graphs = Graph.MAGraphs(self.time_duration, 'Price', self.animated_graph_save, self.image_graph_save) self.div_ma_graphs = Graph.MAGraphs(self.time_duration, 'Dividend', self.animated_graph_save, self.image_graph_save) self.agent_graphs = Graph.AgentGraphs(self.time_duration, self.animated_graph_save, self.image_graph_save) self.agent_performance_graphs = Graph.AgentPerformance( self.time_duration, self.animated_graph_save, self.image_graph_save) if self.dynamic_interest: self.interest_graphs = Graph.InterestRate(self.time_duration, self.animated_graph_save, self.image_graph_save) self.graphs = [ self.market_graphs, self.price_ma_graphs, self.div_ma_graphs, self.agent_graphs, self.agent_performance_graphs, self.interest_graphs ] else: self.graphs = [ self.market_graphs, self.price_ma_graphs, self.div_ma_graphs, self.agent_graphs, self.agent_performance_graphs ] # Warm-Up and run self.warm_up() self.run_market() self.populate_records()