from otree.api import Currency as c, currency_range import csv import pandas as pd import numpy as np import pickle import json from ._builtin import Page, WaitPage from .models import Constants class MertonInstructions(Page): def vars_for_template(self): ret_risk_mean=[1.235, 1.5257, 1.8833, 2.3294, 2.8814] ret_risk_bottom=[0.5247, 0.416, 0.3531, 0.3104, 0.279] ret_risk_top=[2.1496, 3.0564, 4.0583, 5.2066, 6.5235] rf=[1.03, 1.0609, 1.092727, 1.12550881, 1.159274] rets={ "mean":ret_risk_mean, "bottom":ret_risk_bottom, "top":ret_risk_top, "rf":rf, } return { "round":1, "value":100, "prev_values":[100], "rets":rets, } form_model='player' def is_displayed(self): return self.round_number==1 class Merton(Page): def vars_for_template(self): # print(self.round_number) # print(self.player.in_previous_rounds()[-1].mert_value) ret_risk_mean=[1.235, 1.5257, 1.8833, 2.3294, 2.8814] ret_risk_bottom=[0.5247, 0.416, 0.3531, 0.3104, 0.279] ret_risk_top=[2.1496, 3.0564, 4.0583, 5.2066, 6.5235] rf=[1.03, 1.0609, 1.092727, 1.12550881, 1.159274] rets={ "mean":ret_risk_mean, "bottom":ret_risk_bottom, "top":ret_risk_top, "rf":rf, } # print(self.round_number % 5 or 5) if self.round_number not in [1,6,11]: if self.round_number < 6: starter=0 elif self.round_number < 11: starter=5 else: starter=10 prev_values=[100] prev_values.extend([x.mert_value for x in self.player.in_previous_rounds()[starter:]]) # print(prev_values) return { "value":self.player.in_previous_rounds()[-1].mert_value, "prev_rounds":self.player.in_previous_rounds()[starter:], "prev_values":prev_values, "rets":rets, "round":self.round_number % 5 or 5, "weights":{ "rf":self.player.in_previous_rounds()[-1].mert_A, "risky":self.player.in_previous_rounds()[-1].mert_B, } } elif self.round_number in [1,6,11]: return { "value":self.player.mert_value, "prev_rounds":None, "prev_values":[100], "rets":rets, "round":self.round_number % 5 or 5, "weights": { "rf":50, "risky":50, } } form_model='player' form_fields=['mert_B','mert_A'] def is_displayed(self): return self.round_number<16 def before_next_page(self): self.player.mert_return() if self.round_number==15: self.player.calc_hara() class MertonPerformance(Page): def vars_for_template(self): values1=None values2=None values3=None if self.round_number>=5: values1=self.player.in_all_rounds()[:5] if self.round_number>=10: values2=self.player.in_all_rounds()[5:10] if self.round_number==15: values3=self.player.in_all_rounds()[10:15] self.participant.vars['payoffs']=[values2[-1].mert_value,values3[-1].mert_value] # print(self.participant.vars['payoffs']) return { "values":{ "first":values1, "second":values2, "third":values3 }, } def is_displayed(self): x = self.round_number in [5,10,15] return x page_sequence = [ MertonInstructions, Merton, MertonPerformance, ]