-
Notifications
You must be signed in to change notification settings - Fork 188
/
chap_10_structural_model.py
94 lines (74 loc) · 3.08 KB
/
chap_10_structural_model.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/usr/bin/env python
#
# Written by:
# --
# John L. Weatherwax 2007-07-05
#
# email: [email protected]
#
# Please send comments and especially bug reports to the
# above email address.
#
#-----
import numpy; from numpy import asarray, asmatrix, linalg, identity
def structure_model_eq_10_8( c, sigmau2 ):
"""
This code implements Equation 10.8 (the expresions for theta_1 and Omega) for the model
m_t = m_{t-1} + u_t
p_{1,t} = m_t + c q_t
p_{2,t} = m_{t-1}
in the book Empirical Market Microstructure by Joel Hasbrouck.
"""
Theta_1 = asmatrix( [ [ -c**2, c**2 ], [ sigmau2, -sigmau2 ] ] )/( c**2 + sigmau2 )
Omega = asmatrix( [ [ c**4 + 3 * c**2 * sigmau2 + sigmau2**2, c**2 * sigmau2 ], [ c**2 * sigmau2, c**2 * sigmau2 ] ] )/( c**2 + sigmau2 )
return Theta_1, Omega
def structure_model_eq_10_8_alternative_ordering( c, sigmau2 ):
"""
This code implements Equation 10.8 (the expresions for theta_1 and Omega) for the model
m_t = m_{t-1} + u_t
p_{1,t} = m_{t-1}
p_{2,t} = m_t + c q_t
in the book Empirical Market Microstructure by Joel Hasbrouck. Note that this is a different ordering of prices than before.
"""
Theta_1 = asmatrix( [ [ -sigmau2, sigmau2 ], [ c**2, -c**2 ], ] )/( c**2 + sigmau2 )
Omega = asmatrix( [ [ c**2 * sigmau2, c**2 * sigmau2 ], [ c**2 * sigmau2, c**4 + 3 * c**2 * sigmau2 + sigmau2**2 ] ] )/( c**2 + sigmau2 )
return Theta_1, Omega
def main():
print "Duplicate numerical results in the section 'Stacked Models of Multiple Prices'"
#
Omega = asmatrix( [ [ 109.0, 95.3 ], [ 95.3, 109.3 ] ] )
Fprime = linalg.cholesky( Omega )
print "Fprime= ", Fprime
print "Exercise 10.1: (first ordering of prices)"
#
c, sigmau2 = 2.0, 1.0
Theta_1, Omega = structure_model_eq_10_8( c, sigmau2 )
print "Theta_1= ", Theta_1
print "Omega= ", Omega
Fprime = linalg.cholesky( Omega )
print "Fprime= ", Fprime
print "checking: Fprime * Fprime.T= ", Fprime * Fprime.T
T1 = identity( 2 ) + Theta_1 * 1.0
print "Compute the matrix theta(L=1)= ", T1
print "Its first row is= ", T1[0,]
T1Fprime = asmatrix( T1[0,] ) * Fprime
print "[ theta(1) ]_1 F' = ", T1Fprime
print "each element squared= ", asarray(T1Fprime)**2
print "( [ theta(1) ]_1 F' ) ( [ theta(1) ]_1 F' )' = ", T1Fprime * T1Fprime.T
print "Exercise 10.1: (second ordering of prices)"
#
Theta_1, Omega = structure_model_eq_10_8_alternative_ordering( c, sigmau2 )
print "Theta_1= ", Theta_1
print "Omega= ", Omega
Fprime = linalg.cholesky( Omega )
print "Fprime= ", Fprime
print "checking: Fprime * Fprime.T= ", Fprime * Fprime.T
T1 = identity( 2 ) + Theta_1 * 1.0
print "Compute the matrix theta(L=1)= ", T1
print "Its first row is= ", T1[0,]
T1Fprime = asmatrix( T1[0,] ) * Fprime
print "[ theta(1) ]_1 F' = ", T1Fprime
print "each element squared= ", asarray(T1Fprime)**2
print "( [ theta(1) ]_1 F' ) ( [ theta(1) ]_1 F' )' = ", T1Fprime * T1Fprime.T
if __name__ == "__main__":
main()