from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range ) import random author = 'Your name here' doc = """ Your app description """ class Constants(BaseConstants): name_in_url = 'MASTER_EXPERIMENT_OBEXER' players_per_group = None num_rounds = 1 endowment_cash = c(1000) endowment_stock = 10 class Subsession(BaseSubsession): def creating_session(self): global player for player in self.get_players(): player.number = random.choice([1, 2, 3, 4]) print('set player.number to', player.number) if player.number == 1: player.stock_price_1 = 100 player.stock_price_2 = 70 player.stock_price_3 = 40 player.stock_price_4 = 30 elif player.number == 2: player.stock_price_1 = 100 player.stock_price_2 = 70 player.stock_price_3 = 40 player.stock_price_4 = 30 elif player.number == 3: player.stock_price_1 = 100 player.stock_price_2 = 130 player.stock_price_3 = 160 player.stock_price_4 = 170 else: player.stock_price_1 = 100 player.stock_price_2 = 130 player.stock_price_3 = 160 player.stock_price_4 = 170 class Group(BaseGroup): pass class Player(BasePlayer): number = models.IntegerField() # Questions # Kursentwicklung T0-T1 widget = widgets.SliderInput() Beliefs_1 = models.IntegerField( choices=[-4, -3, -2, -1, 0, 1, 2, 3, 4], widget=widgets.SliderInput, min=-4, max=4, doc='''Beliefs of participants''') buy_sell_1 = models.IntegerField( choices=[ [1, 'Kaufen'], [2, 'Verkaufen'], [3, 'Keine Veränderung'], ], doc="""deciding wether to buy/sell or not doing anything""" ) amount_buy_sell_1 = models.IntegerField( min=0, doc="""number of stocks willing to buy/sell""" ) # T1 Tweet Beliefs_Tweet_1 = models.IntegerField( choices=[-4, -3, -2, -1, 0, 1, 2, 3, 4], widget=widgets.SliderInput, min=-4, max=4, doc='''Beliefs of participants''') buy_sell_Tweet_1 = models.IntegerField( choices=[ [1, 'Kaufen'], [2, 'Verkaufen'], [3, 'Keine Veränderung'], ], min=0, doc="""stocks willing to buy/sell""" ) amount_buy_sell_Tweet_1 = models.IntegerField( min=0, doc="""number of stocks willing to buy/sell""" ) # Kursentwicklung T1-T2 Beliefs_2 = models.IntegerField( choices=[-4, -3, -2, -1, 0, 1, 2, 3, 4], widget=widgets.SliderInput, min=-4, max=4, doc='''Beliefs of participants''') buy_sell_2 = models.IntegerField( choices=[ [1, 'Kaufen'], [2, 'Verkaufen'], [3, 'Keine Veränderung'], ], min=0, doc="""stocks willing to buy/sell""" ) amount_buy_sell_2 = models.IntegerField( min=0, doc="""number of stocks willing to buy/sell""" ) # Tweet_2 Beliefs_Tweet_2 = models.IntegerField( choices=[-4, -3, -2, -1, 0, 1, 2, 3, 4], widget=widgets.SliderInput, min=-4, max=4, doc='''Beliefs of participants''') buy_sell_Tweet_2 = models.IntegerField( choices=[ [1, 'Kaufen'], [2, 'Verkaufen'], [3, 'Keine Veränderung'], ], min=0, doc="""stocks willing to buy/sell""" ) amount_buy_sell_Tweet_2 = models.IntegerField( min=0, doc="""number of stocks willing to buy/sell""" ) # Kursentwicklung T2_T3 Beliefs_3 = models.IntegerField( choices=[-4, -3, -2, -1, 0, 1, 2, 3, 4], widget=widgets.SliderInput, min=-4, max=4, doc='''Beliefs of participants''') buy_sell_3 = models.IntegerField( choices=[ [1, 'Kaufen'], [2, 'Verkaufen'], [3, 'Keine Veränderung'], ], min=0, doc="""stocks willing to buy/sell""" ) amount_buy_sell_3 = models.IntegerField( min=0, doc="""number of stocks willing to buy/sell""" ) # Price_path # Tweet_1 stock_price_1 = models.CurrencyField(initial=(100.00)) cash_1 = models.CurrencyField() stock_1 = models.IntegerField() final_1 = models.CurrencyField() change_1 = models.CurrencyField() def cash_amount_1(self): if self.buy_sell_1 == 1: self.cash_1 = Constants.endowment_cash - self.amount_buy_sell_1 * self.stock_price_1 return self.cash_1 elif self.buy_sell_1 == 2: self.cash_1 = Constants.endowment_cash + self.amount_buy_sell_1 * self.stock_price_1 return self.cash_1 elif self.buy_sell_1 == 3: self.cash_1 = Constants.endowment_cash return self.cash_1 def stock_amount_1(self): if self.buy_sell_1 == 1: self.stock_1 = Constants.endowment_stock + self.amount_buy_sell_1 return self.stock_1 elif self.buy_sell_1 == 2: self.stock_1 = Constants.endowment_stock - self.amount_buy_sell_1 return self.stock_1 elif self.buy_sell_1 == 3: self.stock_1 = Constants.endowment_stock return self.stock_1 def final_wealth_1(self): if self.buy_sell_1 == 1: self.final_1 = Constants.endowment_cash - self.amount_buy_sell_1 * self.stock_price_1 + (Constants.endowment_stock + self.amount_buy_sell_1) * self.stock_price_1 return self.final_1 elif self.buy_sell_1 == 2: self.final_1 = Constants.endowment_cash + self.amount_buy_sell_1 * self.stock_price_1 + (Constants.endowment_stock - self.amount_buy_sell_1) * self.stock_price_1 return self.final_1 elif self.buy_sell_1 == 3: self.final_1 = Constants.endowment_cash + Constants.endowment_stock * self.stock_price_1 return self.final_1 def change_wealth_1(self): if self.buy_sell_1 == 1: self.change_1 = Constants.endowment_cash - self.amount_buy_sell_1 * self.stock_price_1 + (Constants.endowment_stock + self.amount_buy_sell_1) * self.stock_price_1 - 2000 return self.change_1 elif self.buy_sell_1 == 2: self.change_1 = Constants.endowment_cash + self.amount_buy_sell_1 * self.stock_price_1 + (Constants.endowment_stock - self.amount_buy_sell_1) * self.stock_price_1 -2000 return self.change_1 elif self.buy_sell_1 == 3: self.change_1 = Constants.endowment_cash + Constants.endowment_stock * self.stock_price_1 - 2000 return self.change_1 # Kursentwicklung T1_T2 cash_t1 = models.CurrencyField() stock_t1 = models.IntegerField() final_t1 = models.CurrencyField() change_t1 = models.CurrencyField() def cash_amount_t1(self): if self.buy_sell_Tweet_1 == 1: self.cash_t1 = self.cash_1 - self.amount_buy_sell_Tweet_1 * self.stock_price_1 return self.cash_t1 elif self.buy_sell_Tweet_1 == 2: self.cash_t1 = self.cash_1 + self.amount_buy_sell_Tweet_1 * self.stock_price_1 return self.cash_t1 elif self.buy_sell_Tweet_1 == 3: self.cash_t1 = self.cash_1 return self.cash_t1 def stock_amount_t1(self): if self.buy_sell_Tweet_1 == 1: self.stock_t1 = self.stock_1 + self.amount_buy_sell_Tweet_1 return self.stock_t1 elif self.buy_sell_Tweet_1 == 2: self.stock_t1 = self.stock_1 - self.amount_buy_sell_Tweet_1 return self.stock_t1 elif self.buy_sell_Tweet_1 == 3: self.stock_t1 = self.stock_1 return self.stock_t1 def final_wealth_t1(self): if self.buy_sell_Tweet_1 == 1: self.final_t1 = self.cash_t1 - self.amount_buy_sell_Tweet_1 * self.stock_price_2 + (self.stock_t1 + self.amount_buy_sell_Tweet_1) * self.stock_price_2 return self.final_t1 elif self.buy_sell_Tweet_1 == 2: self.final_t1 = self.cash_t1 + self.amount_buy_sell_Tweet_1 * self.stock_price_2 + (self.stock_t1 - self.amount_buy_sell_Tweet_1) * self.stock_price_2 return self.final_t1 elif self.buy_sell_Tweet_1 == 3: self.final_t1 = self.cash_t1 + self.stock_t1 * self.stock_price_2 return self.final_t1 def change_wealth_t1(self): if self.buy_sell_Tweet_1 == 1: self.change_t1 = self.cash_t1 - self.amount_buy_sell_Tweet_1 * self.stock_price_2 + (self.stock_t1 + self.amount_buy_sell_Tweet_1) * self.stock_price_2 - self.final_1 return self.change_t1 elif self.buy_sell_Tweet_1 == 2: self.change_t1 = self.cash_t1 + self.amount_buy_sell_Tweet_1 * self.stock_price_2 + (self.stock_t1 - self.amount_buy_sell_Tweet_1) * self.stock_price_2 - self.final_1 return self.change_t1 elif self.buy_sell_Tweet_1 == 3: self.change_t1 = self.cash_t1 + self.stock_t1 * self.stock_price_2 - self.final_1 return self.change_t1 # Tweet_2 stock_price_2 = models.CurrencyField(initial=(70.00)) cash_2 = models.CurrencyField() stock_2 = models.IntegerField() final_2 = models.CurrencyField() change_2 = models.CurrencyField() def cash_amount_2(self): if self.buy_sell_2 == 1: self.cash_2 = self.cash_t1 - self.amount_buy_sell_2 * self.stock_price_2 return self.cash_2 elif self.buy_sell_2 == 2: self.cash_2 = self.cash_t1 + self.amount_buy_sell_2 * self.stock_price_2 return self.cash_2 elif self.buy_sell_2 == 3: self.cash_2 = self.cash_t1 return self.cash_2 def stock_amount_2(self): if self.buy_sell_2 == 1: self.stock_2 = self.stock_t1 + self.amount_buy_sell_2 return self.stock_2 elif self.buy_sell_2 == 2: self.stock_2 = self.stock_t1 - self.amount_buy_sell_2 return self.stock_2 elif self.buy_sell_2 == 3: self.stock_2 = self.stock_t1 return self.stock_2 def final_wealth_2(self): if self.buy_sell_2 == 1: self.final_2 = self.cash_2 - self.amount_buy_sell_2 * self.stock_price_2 + ( self.stock_2 + self.amount_buy_sell_2) * self.stock_price_2 return self.final_2 elif self.buy_sell_2 == 2: self.final_2 = self.cash_2 + self.amount_buy_sell_2 * self.stock_price_2 + ( self.stock_2 - self.amount_buy_sell_2) * self.stock_price_2 return self.final_2 elif self.buy_sell_2 == 3: self.final_2 = self.cash_2 + self.stock_2 * self.stock_price_2 return self.final_2 def change_wealth_2(self): if self.buy_sell_2 == 1: self.change_2 = self.cash_2 - self.amount_buy_sell_2 * self.stock_price_2 + ( self.stock_2 + self.amount_buy_sell_2) * self.stock_price_2 - self.final_t1 return self.change_2 elif self.buy_sell_2 == 2: self.change_2 = self.cash_2 + self.amount_buy_sell_2 * self.stock_price_2 + ( self.stock_2 - self.amount_buy_sell_2) * self.stock_price_2 - self.final_t1 return self.change_2 elif self.buy_sell_2 == 3: self.change_2 = self.cash_2 + self.stock_2 * self.stock_price_2 - self.final_t1 return self.change_2 # Kursentwicklung T2_T3 cash_t2 = models.CurrencyField() stock_t2 = models.IntegerField() final_t2 = models.CurrencyField() change_t2 = models.CurrencyField() def cash_amount_t2(self): if self.buy_sell_Tweet_2 == 1: self.cash_t2 = self.cash_2 - self.amount_buy_sell_Tweet_2 * self.stock_price_2 return self.cash_t2 elif self.buy_sell_Tweet_2 == 2: self.cash_t2 = self.cash_2 + self.amount_buy_sell_Tweet_2 * self.stock_price_2 return self.cash_t2 elif self.buy_sell_Tweet_2 == 3: self.cash_t2 = self.cash_2 return self.cash_t2 def stock_amount_t2(self): if self.buy_sell_Tweet_2 == 1: self.stock_t2 = self.stock_2 + self.amount_buy_sell_Tweet_2 return self.stock_t2 elif self.buy_sell_Tweet_2 == 2: self.stock_t2 = self.stock_2 - self.amount_buy_sell_Tweet_2 return self.stock_t2 elif self.buy_sell_Tweet_2 == 3: self.stock_t2 = self.stock_2 return self.stock_t2 def final_wealth_t2(self): if self.buy_sell_Tweet_2 == 1: self.final_t2 = self.cash_t2 - self.amount_buy_sell_Tweet_2 * self.stock_price_3 + ( self.stock_t2 + self.amount_buy_sell_Tweet_2) * self.stock_price_3 return self.final_t2 elif self.buy_sell_Tweet_2 == 2: self.final_t2 = self.cash_t2 + self.amount_buy_sell_Tweet_2 * self.stock_price_3 + ( self.stock_t2 - self.amount_buy_sell_Tweet_2) * self.stock_price_3 return self.final_t2 elif self.buy_sell_Tweet_2 == 3: self.final_t2 = self.cash_t2 + self.stock_t2 * self.stock_price_3 return self.final_t2 def change_wealth_t2(self): if self.buy_sell_Tweet_2 == 1: self.change_t2 = self.cash_t2 - self.amount_buy_sell_Tweet_2 * self.stock_price_3 + ( self.stock_t2 + self.amount_buy_sell_Tweet_2) * self.stock_price_3 - self.final_2 return self.change_t2 elif self.buy_sell_Tweet_2 == 2: self.change_t2 = self.cash_t2 + self.amount_buy_sell_Tweet_2 * self.stock_price_3 + ( self.stock_t2 - self.amount_buy_sell_Tweet_2) * self.stock_price_3 - self.final_2 return self.change_t2 elif self.buy_sell_Tweet_2 == 3: self.change_t2 = self.cash_t2 + self.stock_t2 * self.stock_price_3 - self.final_2 return self.change_t2 # Ergebnis stock_price_3 = models.CurrencyField(initial=(40.00)) stock_price_4 = models.CurrencyField(initial=(30.00)) cash_3 = models.CurrencyField() stock_3 = models.IntegerField() final_3 = models.CurrencyField() change_3 = models.CurrencyField() final_end = models.CurrencyField() def cash_amount_3(self): if self.buy_sell_3 == 1: self.cash_3 = Constants.endowment_cash - self.amount_buy_sell_3 * self.stock_price_3 return self.cash_3 elif self.buy_sell_3 == 2: self.cash_3 = Constants.endowment_cash + self.amount_buy_sell_3 * self.stock_price_3 return self.cash_3 elif self.buy_sell_3 == 3: self.cash_3 = Constants.endowment_cash return self.cash_3 def stock_amount_3(self): if self.buy_sell_3 == 1: self.stock_3 = Constants.endowment_stock + self.amount_buy_sell_3 return self.stock_3 elif self.buy_sell_3 == 2: self.stock_3 = Constants.endowment_stock - self.amount_buy_sell_3 return self.stock_3 elif self.buy_sell_3 == 3: self.stock_3 = Constants.endowment_stock return self.stock_3 def final_wealth_3(self): if self.buy_sell_3 == 1: self.final_3 = self.cash_3 - self.amount_buy_sell_3 * self.stock_price_3 + ( self.stock_3 + self.amount_buy_sell_3) * self.stock_price_3 return self.final_3 elif self.buy_sell_3 == 2: self.final_3 = self.cash_3 + self.amount_buy_sell_3 * self.stock_price_3 + ( self.stock_3 - self.amount_buy_sell_3) * self.stock_price_3 return self.final_3 elif self.buy_sell_3 == 3: self.final_3 = self.cash_3 + self.stock_3 * self.stock_price_3 return self.final_3 def change_wealth_3(self): if self.buy_sell_3 == 1: self.change_3 = self.cash_3 - self.amount_buy_sell_3 * self.stock_price_3 + ( self.stock_3 + self.amount_buy_sell_3) * self.stock_price_3 - self.final_t2 return self.change_3 elif self.buy_sell_3 == 2: self.change_3 = self.cash_3 + self.amount_buy_sell_3 * self.stock_price_3 + ( self.stock_3 - self.amount_buy_sell_3) * self.stock_price_3 - self.final_t2 return self.change_3 elif self.buy_sell_3 == 3: self.change_3 = self.cash_3 + self.stock_3 * self.stock_price_3 - self.final_t2 return self.change_3 def final_wealth_end(self): self.final_end = self.cash_3 + self.stock_3 * self.stock_price_4 return self.final_end