コード例 #1
0
    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()