import random import numpy from otree.api import ( models, widgets, BaseConstants, BaseSubsession, BaseGroup, BasePlayer, Currency as c, currency_range, ) doc = """ Risk Game """ class Constants(BaseConstants): name_in_url = 'investment' players_per_group = None num_rounds = 30 instructions_template = 'RiskGame/instructions.html' endowment = 500 safe_ret = 1.03 num_rounds_to_pay = 1 rounds_to_pay = random.randrange(10, num_rounds, 10) # selects 2 periods to pay out of total number of periods # rounds_to_pay.sort() print("rounds to pay Risk Game:", rounds_to_pay) class Subsession(BaseSubsession): # def creating_session(self): # import random # if self.round_number == 1: # paying_round = random.randrange(10, Constants.num_rounds,10) # self.session.vars['paying_round'] = paying_round # print("paying_round_Risk", paying_round) pass class Group(BaseGroup): pass class Player(BasePlayer): endowment = models.FloatField() investment = models.FloatField(min=0,label='A aracına yatırımınız:') pyf = models.FloatField() rounds_to_pay = models.IntegerField(initial= Constants.rounds_to_pay) blm_to_pay = models.IntegerField() safe_investment = models.FloatField() risky_ret = models.FloatField() period = models.IntegerField() tur = models.IntegerField() def set_payoffs(self): self.risky_ret = numpy.random.lognormal(mean=0.06, sigma=0.55, size=None) self.risky_ret = round(self.risky_ret, 2) if self.round_number == 1 or self.round_number == 11 or self.round_number == 21 : self.pyf = Constants.endowment * Constants.safe_ret - self.investment * Constants.safe_ret + self.investment * self.risky_ret else: self.pyf = self.in_round( self.round_number - 1).pyf * Constants.safe_ret - self.investment * Constants.safe_ret + self.investment * self.risky_ret self.pyf = round(self.pyf, 2) # payoff_list = p.participant.vars.get('payoffs', []) # payoff_list.append(p.pyf) # p.participant.vars['payoffs'] = payoff_list # print("player participation variables", p.participant.vars) # print("payoff list", payoff_list) def safe_inv(self): self.safe_investment = self.endowment - self.investment self.safe_investment = round(self.safe_investment,2) def investment_max(self): return self.endowment