#!wish toplevel .bias_p global K1 global K2 global alpha global conv global v global w set K1 -2 set K2 1 set alpha 1 proc skip_args3 { a b c } { } proc recompute_conv {} { global K1 global K2 global alpha global conv set conv "ERROR" if { [ catch { set Q [expr $K2-$K1 ] if { $Q < 1 } { # signal error expr 1/0 } set conv 0.0 for { set i 1 } { $i <= $Q } { incr i } { set conv [expr $conv + ($Q-$i+1.0)*pow($i, $alpha)] } set conv [expr 2.0*$conv/($Q*($Q+1))] } ] } { set conv "ERROR" } .bias_p.conv configure -text "Conversion factor: w/v=$conv" } label .bias_p.l2 -text "Upper bias limit" entry .bias_p.e2 -textvariable K2 grid .bias_p.l2 .bias_p.e2 -sticky news label .bias_p.l1 -text "Lower bias limit" entry .bias_p.e1 -textvariable K1 grid .bias_p.l1 .bias_p.e1 -sticky news label .bias_p.l3 -text "Alpha" entry .bias_p.e3 -textvariable alpha grid .bias_p.l3 .bias_p.e3 -sticky news label .bias_p.conv -background gray grid .bias_p.conv - -sticky news -padx 3 -pady 3 label .bias_p.l4 -text "v (jump)" entry .bias_p.e4 -textvariable v grid .bias_p.l4 .bias_p.e4 -sticky news label .bias_p.l5 -text "w (walk)" entry .bias_p.e5 -textvariable w grid .bias_p.l5 .bias_p.e5 -sticky news frame .bias_p.f -background gray button .bias_p.f.b1 -text "Convert v to w" -command { if { [catch { set w [expr $v * $conv ] } ] } { set w "ERROR" } } button .bias_p.f.b2 -text "Convert w to v" -command { if { [catch { set v [expr $w / $conv ] } ] } { set w "ERROR" } } grid .bias_p.f.b1 .bias_p.f.b2 -padx 10 -pady 8 grid .bias_p.f - -sticky news -pady 3 -padx 3 recompute_conv trace variable K1 w { recompute_conv; skip_args3 } trace variable K2 w { recompute_conv; skip_args3 } trace variable alpha w { recompute_conv; skip_args3 } wm title .bias_p "Volatility converter"