from otree.api import * c = cu doc = '' class Constants(BaseConstants): name_in_url = 'MonthlyInfo' players_per_group = None num_rounds = 20 class Subsession(BaseSubsession): pass class Group(BaseGroup): pass class Player(BasePlayer): name = models.StringField() age = models.IntegerField() fund_a_allocation = models.IntegerField(max=100, min=0) fund_a_realized = models.FloatField() fund_b_realized = models.FloatField() combined_realized = models.FloatField() class Opening(Page): form_model = 'player' @staticmethod def is_displayed(player): return player.round_number==1 class Decision(Page): form_model = 'player' form_fields = ['fund_a_allocation'] class Results(Page): form_model = 'player' @staticmethod def js_vars(player): import numpy fund_a_return_calc=numpy.random.normal(loc=.25, scale=.177, size=None) fund_b_return_calc=numpy.random.normal(loc=1, scale=3.54, size=None) if fund_a_return_calc < 0: fund_a_return_calc=0 combined_return_calc=fund_a_return_calc*(player.fund_a_allocation/100) + fund_b_return_calc*((100-player.fund_a_allocation)/100) player.fund_a_realized=fund_a_return_calc player.fund_b_realized=fund_b_return_calc player.combined_realized=combined_return_calc return dict( fund_b_return=fund_b_return_calc, fund_a_return=fund_a_return_calc, combined_return=combined_return_calc ) page_sequence = [Opening, Decision, Results]