You are on page 1of 10

Chair of Mathematical Finance

Department of Mathematics
Technical University of Munich
Financial Mathematics 1
Aleksey Min, Henrik Sloot, and Ben Spies

Exercise sheet 7
The exercise sheet will be discussed in two groups of Zoom exercise sessions on December 8, 2021,
and in videos available on the Moodle page. For details, see the course’s Moodle announcements.
You should try to solve the exercises at home before the exercise. Grading bonus and homework
submission rules: https://www.moodle.tum.de/mod/page/view.php?id=1863336.

Exercise 7.1
Consider a two-period binomial model with P (0) = 100, u = 1.2, d = 0.8, and r = 5 %. We want to
price a European call option with maturity T = 2 and strike X = 90, whose payoff at maturity and price
process are denoted by C(2) and VC = {VC (t) : t ∈ {0, 1, 2}}, respectively.
a) Draw a binomial tree diagram with the values of the security at each node and determine the set of
all risk-neutral probability measures M.
Solution:
144 = 100 · u2

120 = 100 · u

P (0) = 100 96 = 100 · u · d

80 = 100 · d

64 = 100 · d2
Since d < 1 + r < u, we can apply Theorem 3.27 and conclude that there exists a unique risk-neutral
martingale measure given by
 
Q̃ = Q̃(ω1 ), Q̃(ω2 ), Q̃(ω3 ), Q̃(ω4 )

such that

Q̃(ω1 ) = q̃ 2 ,
Q̃(ω2 ) = q̃ · (1 − q̃),
Q̃(ω3 ) = (1 − q̃) · q̃,
2
Q̃(ω4 ) = (1 − q̃) .

The probability of an upward movement is computed via


1+r−d 1 + 0.05 − 0.8
q̃ = = ≈ 0.625,
u−d 1.2 − 0.8

which yields Q̃ = (0.3906, 0.2344, 0.2344, 0.1406).


b) Use Theorem 4.3 (see slide 163) to determine the option price VC (t) at time points t ∈ {0, 1, 2}.
Solution: Note that since |M| = 1, by Theorem 2.22 or by Theorem 4.7, the market is complete

© Technical University of Munich, Chair of Mathematical Finance


2

and therefore, the contingent claim is attainable. We use the formula from Theorem 4.3 to compute
4
h i h i 1 X
VC (0) = EQ̃ C̃(2) | I0 = EQ̃ C̃(2) = 2 C(2, ωi ) · Q̃(ωi )
(1 + r) i=1
1
= (54 · 0.3906 + 2 · 6 · 0.2344 + 0) ≈ 21.6827,
1.052 h i
VC (1) = P0 (1) · EQ̃ C̃(2) | I1 (ω)
 h i
E C̃(2) | {ω1 , ω2 } ω ∈ {ω1 , ω2 },

= P0 (1) · h i
E C̃(2) | {ω3 , ω4 } ω ∈ {ω3 , ω4 },

  
 1 C(2, ω1 ) · Q̃(ω1 ) Q̃(ω2 )
1+r  Q̃(ω1 )+Q̃(ω2 )
+ C(2, ω2 ) · Q̃(ω1 )+Q̃(ω2 ) 
ω ∈ {ω1 , ω2 },
= ) )
 1 C(2, ω3 ) · Q̃(ω3 Q̃(ω
+ C(2, ω4 ) · Q̃(ω )+Q̃(ω
4
ω ∈ {ω3 , ω4 },
1+r Q̃(ω3 )+Q̃(ω4 ) 3 4)
  
 1 54 · 0.3906 0.2344
1.05  0.3906+0.2344 + 6 · 0.3906+0.2344 ω ∈ {ω1 , ω2 },
= 
 1 6· 0.2344 0.1406
1.05 0.2344+0.1406 + 0 · 0.2344+0.1406 ω ∈ {ω3 , ω4 },
(
34.6839 ω ∈ {ω1 , ω2 },

3.5718 ω ∈ {ω3 , ω4 },
h i
VC (2) = P0 (2) · EQ̃ C̃(2) | I2 = C(2, ω) ∀ω ∈ Ω.

Exercise 7.2
Consider a two-period binomial model with P (0) = 100, u = 1.25, d = 0.8 and r = 10 %. Furthermore,
denote Y (t) = max {P (s) : s ≤ t}, t ∈ {0, 1, 2}.
a) Draw a tree diagram (see slide 151) and determine the risk-neutral probability for an upward move-
ment q̃.
Solution:
156.25 = 100 · u2

125 = 100 · u

P (0) = 100 100 = 100 · u · d

80 = 100 · d

64 = 100 · d2
Using the same argumentation as in Exercise 1, we calculate the probability of an upward movement
as
1+r−d 1.1 − 0.8 2
q̃ = = = .
u−d 1.25 − 0.8 3

b) Write the elements of the sample set Ω and their corresponding probabilities under the risk-neutral
measure Q̃.

Financial Mathematics 1 — Exercise


The exercise sheet will be discussed in two groups of Zoom exercise sessions on December 8, 2021, and in videos available on
the Moodle page. For details, see the course’s Moodle announcements. You should try to solve the exercises at home before
the exercise. Grading bonus and homework submission rules: https://www.moodle.tum.de/mod/page/view.php?id=1863336.
3

Solution: We have Ω = {ω1 , ω2 , ω3 , ω4 } = {(up, up) , (up, down) , (down, up) , (down, down)}. Again
using the argumentation from Exercise 1 and the probability of an upward movement calculated in
Part a, we get
 
Q̃ = Q̃(ω1 ), Q̃(ω2 ), Q̃(ω3 ), Q̃(ω4 )
 
2
= q̃ 2 , q̃ · (1 − q̃), (1 − q̃) · q̃, (1 − q̃)
 
4 2 2 1
= , , , .
9 9 9 9

c) Consider a knock-in barrier option with exercise price X = 90, barrier B = 110 and maturity T = 2;
its payoff is given by:
D1 (2) = max {P (2) − X, 0}1[Y (2)≥B] .
Determine the payoff D1 (2, ω) for all ω ∈ Ω and use Theorem 4.3 (see slide 163) to calculate the
option price at time t = 0.
Solution: First, note that the path-maximum in the different states is given by

Y (2, ω1 ) = 156.25, Y (2, ω2 ) = 125, Y (2, ω3 ) = 100, Y (2, ω4 ) = 100.

Thus, we get for the value of the option at time t = 2:

D1 (2, ω1 ) = max {156.25 − 90, 0} · 1 = 66.25,


D1 (2, ω2 ) = max {100 − 90, 0} · 1 = 10,
D1 (2, ω3 ) = max {100 − 90, 0} · 0 = 0,
D1 (2, ω4 ) = max {64 − 90, 0} · 0 = 0.

Since the market is complete, Theorem 4.3 can be applied and


h i 1
VD1 (0) = P0 (0) · EQ̃ D̃1 (2) | F0 = · EQ̃ [D1 (2)]
1.21
4  
1 X 1 4 2
= D1 (2, ωi ) · Q̃(ωi ) = 66.25 · + 10 · + 0 + 0 ≈ 26.1708.
1.21 i=1 1.21 9 9

d) Use Theorem 3.28 (see slide 156) to determine the probability Q̃(Y (2) ≥ P (0)ui ), i ∈ {0, 1, 2}, and
use the result to price a digital barrier option with payoff at maturity T = 2 given by D2 (2) =
1[Y (2)≥B] for B = 110.
Solution: Note that we have d = u−1 and Y (2) ∈ P (0) · ui , i ∈ {0, 1, 2} = {100, 125, 156.25}, so


we can apply Theorem 3.28. This gives us


   
2 2+i 2−i 2+i
Q̃ Y (2) ≥ P (0) · ui = 2+i · q̃ 2 · (1 − q̃) 2 · 1N

2 2
T  
X T 
T −n n−i

+ · q̃ n · (1 − q̃) + q̃ T +i−n · (1 − q̃) .
n
n=b 2 +1c
T +i

Financial Mathematics 1 — Exercise


The exercise sheet will be discussed in two groups of Zoom exercise sessions on December 8, 2021, and in videos available on
the Moodle page. For details, see the course’s Moodle announcements. You should try to solve the exercises at home before
the exercise. Grading bonus and homework submission rules: https://www.moodle.tum.de/mod/page/view.php?id=1863336.
4

Evaluating this expression for i ∈ {0, 1, 2} yields


   1  1    2  0  0  2 !
2 2 1 2 2 1 2 1
Q̃(Y (2) ≥ 100) = · · ·1+ · · + ·
1 3 3 2 3 3 3 3
4 4 1
=+ + = 1,
9 9 9
   3/2  1/2    2  0  1  1 !
2 2 1 2 2 1 2 1
Q̃(Y (2) ≥ 125) = 3 · · ·0+ · · + ·
/2 3 3 2 3 3 3 3
4 2 2
=+ = ,
9 9 3
   2  0
2 2 1 4
Q̃(Y (2) ≥ 156.25) = · · = .
2 3 3 9

Since the market is complete, the digital barrier option is attainable and can be priced as follows:
h i 1
VD2 (0) = P0 (0) · EQ̃ D̃2 (2) | F0 = · EQ̃ [D2 (2)]
1.12
1   1
= 2 · EQ̃ 1{Y (2)≥110} = 1.21 · Q̃(Y (2) ≥ 110)
1.1
1 1 2
= · Q̃(Y (2) ≥ 125) = · ≈ 0.5510.
1.21 1.21 3

Exercise 7.3
Consider the two-period financial market model from Exercise 6.2 with a riskless interest rate r = 0.
Then, the set of all risk neutral probability measures is given by:
n 0 o
M = 1/6 1/6 2/9 4/9 .

Construct a hedging strategy for a European put option with strike X = 2 and maturity T = 2.

Solution: Note that |M| = 1, i.e. by Theorem 4.7, the financial market is complete. The payoff of the
put option is
Put(2) = max {X − P1 (2), 0} = max {2 − P1 (2), 0}.
We first evaluate the value of the put option at the different time points. Obviously,
1 7
Put(2, ω1 ) = 0, Put(2, ω2 ) = , Put(2, ω3 ) = 1, Put(2, ω4 ) = .
2 4

Financial Mathematics 1 — Exercise


The exercise sheet will be discussed in two groups of Zoom exercise sessions on December 8, 2021, and in videos available on
the Moodle page. For details, see the course’s Moodle announcements. You should try to solve the exercises at home before
the exercise. Grading bonus and homework submission rules: https://www.moodle.tum.de/mod/page/view.php?id=1863336.
5

Furthermore, by Theorem 4.3,

1 1 1 2 4 7 13
VPut (0) = EQ̃ [Put(2) | F0 ] = ·0+ · + ·1+ · =
6 6 2 9 9 4 12
VPut (1) = P0 (1) · EQ̃ [Put(2) | F1 ](ω) = EQ̃ [Put(2) | F1 ](ω)
(
EQ̃ [Put(2) | {ω1 , ω2 }], ω ∈ {ω1 , ω2 }
=
EQ̃ [Put(2) | {ω3 , ω4 }], ω ∈ {ω3 , ω4 }
 1 1
0 · 1 6 1 + 1 · 1 6 1 , ω ∈ {ω1 , ω2 }
+6 2 +6
= 6
2
6
4
1 · 2 9 4 + 7 · 2 9 4 , ω ∈ {ω3 , ω4 }
9 + 9
4 9 + 9
(
1
, ω ∈ {ω1 , ω2 }
= 43
2 , ω ∈ {ω3 , ω4 }.

Now let ϕ be a predictable hedging strategy. We want to solve the following equations:

VPut (t) = ϕ0 (t) · P0 (t) + ϕ1 (t) · P1 (t), t ∈ {0, . . . , T }.

At time t = 2, this results in the following equations, depending on the four different states:

5
0 = ϕ0 (2, ω1 ) + ϕ1 (2, ω1 ) · ,
2
1 3
= ϕ0 (2, ω2 ) + ϕ1 (2, ω2 ) · ,
2 2
1 = ϕ0 (2, ω3 ) + ϕ1 (2, ω3 ) · 1,
7 1
= ϕ0 (2, ω4 ) + ϕ1 (2, ω4 ) · .
4 4
Since the hedging strategy is predictable, it furthermore satisfies the four equations

ϕ0 (2, ω1 ) = ϕ0 (2, ω2 ), ϕ0 (2, ω3 ) = ϕ0 (2, ω4 ),


ϕ1 (2, ω1 ) = ϕ1 (2, ω2 ), ϕ1 (2, ω3 ) = ϕ1 (2, ω4 ).

In combination, we have the linear equation system


     
1 5/2 0 0 ϕ0 (2, ω1 ) 0
1 3/2 0 0 ϕ1 (2, ω1 ) 1/2
 ·  =  .
0 0 1 1  ϕ0 (2, ω3 )  1 
0 0 1 1/4 ϕ1 (2, ω3 ) 7/4

Solving for the remaining four unknowns yields

5
ϕ0 (2, ω1 ) = ϕ0 (2, ω2 ) = , ϕ0 (2, ω3 ) = ϕ0 (2, ω4 ) = 2,
4
1
ϕ1 (2, ω1 ) = ϕ1 (2, ω2 ) = − , ϕ1 (2, ω3 ) = ϕ1 (2, ω4 ) = −1.
2
At time t = 1, the equation to satisfy is

VPut (1, ω) = ϕ0 (1, ω) · 1 + ϕ1 (1, ω) · P (1, ω), ∀ω ∈ Ω.

Financial Mathematics 1 — Exercise


The exercise sheet will be discussed in two groups of Zoom exercise sessions on December 8, 2021, and in videos available on
the Moodle page. For details, see the course’s Moodle announcements. You should try to solve the exercises at home before
the exercise. Grading bonus and homework submission rules: https://www.moodle.tum.de/mod/page/view.php?id=1863336.
6

This results in the two equations


1
= ϕ0 (1, ω) + ϕ1 (1, ω) · 2, ω ∈ {ω1 , ω2 },
4
3 1
= ϕ0 (1, ω) + ϕ1 (1, ω) · , ω ∈ {ω3 , ω4 }.
2 2
Predictability of ϕ yields

ϕ0 (1, ω1 ) = ϕ0 (1, ω2 ) = ϕ0 (1, ω3 ) = ϕ0 (1, ω4 ),


ϕ1 (1, ω1 ) = ϕ1 (1, ω2 ) = ϕ1 (1, ω3 ) = ϕ1 (1, ω4 ).

In combination, we have the linear equation system


     
1 2 ϕ0 (1) 1/4
1
· = 3 .
1 /2 ϕ1 (1) /2

Altogether, we can solve for the remaining two unknowns to obtain


23 5
ϕ0 (1, ω) = and ϕ1 (1, ω) = − ∀ω ∈ Ω.
12 6

Note, that a hedging strategy also must be self-financing; for this, we check that
1 ! 5 1 1
= ϕ0 (2, ω1 ) + ϕ1 (2, ω1 )2 = − · 2 =
4 4 2 4
3 ! 1 1 3
= ϕ0 (2, ω1 ) + ϕ1 (2, ω1 ) = 2 − 1 = .
2 2 2 2

Programming exercise 7.4


Let r ≥ 0 and σ > 0 and consider an n-period binomial tree with final maturity T > 0 and step-size
∆t = T /n.
a) Write an R-function StockPriceDensity returning a distr::DiscreteDistribution object of the
(discrete) distribution of the final stock price P1 (T, ωi ), i ∈ {1, . . . , n + 1}. The arguments are the
initial price s0 , the inter-period interest rate r, and the upwards and downwards movement u and d,
respectively, and the number of periods n. Hint: Draw the corresponding (recombining!) tree first;
use the R-function dbinom .
Solution:
library ( tidyverse )
library ( patchwork )
library ( distr )
library ( distrEx )
5

S t o c kPr ice Di str ib uti on <- function (s , r , u , d , n ) {


q <- (1 + r - d ) / ( u - d )

D iscreteDistribution (
10 supp = s * exp ((0: n ) * log ( u ) + ( n - (0: n )) * log ( d )) ,
prob = dbinom (0: n , n , q )
)

Financial Mathematics 1 — Exercise


The exercise sheet will be discussed in two groups of Zoom exercise sessions on December 8, 2021, and in videos available on
the Moodle page. For details, see the course’s Moodle announcements. You should try to solve the exercises at home before
the exercise. Grading bonus and homework submission rules: https://www.moodle.tum.de/mod/page/view.php?id=1863336.
7

Let T = 5, r = 3 %, σ = 20 %, and s0 = 100. Furthermore, define the upwards


√ and downwards movement
and the inter-period interest rate for the n-period tree by un = exp {σ ∆t}, dn = 1/un , and rn = r∆t,
respectively.
b) Plot the counting density of P1 (T ), i.e., the graph of the mapping

{0, . . . , n} → [0, 1], k 7→ P P1 (T ) = k ,

for n = 100 using a log-scale for the states k ∈ {0, . . . , n}.


Solution:
s <- 100
r <- 3e -2
sigma <- 20 e -2
n <- 100
5 tt <- 5
dt <- tt / n

r _ dt <- r * dt
u _ dt <- exp ( sigma * sqrt ( dt ))
10 d _ dt <- 1 / u _ dt

S t o c kPr ice Di str ib uti on (s , r _ dt , u _ dt , d _ dt , n ) % >%


{ tibble ( Support = support (.) , ‘ Counting density ‘ = prob (.)) } % >%
ggplot ( aes ( x = Support , y = ‘ Counting density ‘)) +
15 geom _ point () +
scale _ x _ continuous ( trans = " log10 " ) +
theme _ minimal ()

c) Show numerically, using the method distrEx::E, for n = 100 that


h i
−n
s0 = P1 (0) = EQ̃ P1 (T ) · (1 + rn ) .

Solution:
s - E ( S to ckP ri ceD is tri but i o n (s , r _ dt , u _ dt , d _ dt , n ) / (1 + r _ dt )^ n )

Now, consider a digital call option D, i.e., with payoff D(T ) = 1{P1 (T )≥k} for some k > 0.
d) Create a plot for n ∈ {1, . . . , 1000} to show that the arbitrage-free price of the digital call option
with k = s0 converges to  !
log (s0 /k) + r − 21 σ 2 T
Φ − √ ,
σ T
where Φ is the cumulative distribution function of the standard normal distribution. Create a second

plot to show that the convergence happens at rate O(1/ n), i.e., there exists n0 , m ∈ N s.t. the error
terms n , n ∈ N, fulfil
|n | ≤ K ∀n ≥ n0 .

Financial Mathematics 1 — Exercise


The exercise sheet will be discussed in two groups of Zoom exercise sessions on December 8, 2021, and in videos available on
the Moodle page. For details, see the course’s Moodle announcements. You should try to solve the exercises at home before
the exercise. Grading bonus and homework submission rules: https://www.moodle.tum.de/mod/page/view.php?id=1863336.
8

Solution:
k <- s
g <- function (x , k , r _ dt , n ) {
ifelse ( x > k , 1 , 0) / (1 + r _ dt )^ n
}
5

df <- tibble (
n = seq _ len (1 e3 ) ,
dt = ! ! tt / n ,
u _ dt = exp ( ! ! sigma * sqrt ( dt )) ,
10 d _ dt = 1 / u _ dt ,
r _ dt = ! ! r * dt ) % >%
rowwise () % >%
mutate (
Binomial = E ( S toc kP ric eD ist rib ut ion ( ! !s , r _ dt , u _ dt , d _ dt , n ) ,
15 fun = g , k = ! !k , r _ dt = r _ dt , n = n ) ,
Limit = pnorm (
0,
mean = log ( ! ! s / ! ! k ) + ( ! ! r - 0.5 * ! ! sigma ^2) * ! ! tt ,
sd = ! ! sigma * sqrt ( ! ! tt ) ,
20 lower . tail = FALSE ) *
exp ( - ! ! r * ! ! tt ) ,
Error = Limit - Binomial )

(
25 df % >%
ggplot ( aes ( x = n , y = Binomial )) +
geom _ line () +
geom _ hline ( aes ( yintercept = Limit [[1]]) , linetype = " dotted " ) +
scale _ x _ continuous ( name = " n " , trans = " log10 " ) +
30 scale _ y _ continuous ( name = ~ E [ tilde ( Q )]( tilde ( P )[1]( T ))) +
theme _ minimal ()
) / (
df % >%
ggplot ( aes ( x = n , y = Error * sqrt ( n ))) +
35 geom _ line () +
geom _ hline ( yintercept = 0 , linetype = " dotted " ) +
scale _ x _ continuous ( name = " n " , trans = " log10 " ) +
scale _ y _ continuous ( name = ~ epsilon [ n ] * sqrt ( n )) +
theme _ minimal ()
40 )

e) Create a plot for n ∈ {1, 3, . . . , 999} to show that the convergence in d) on the odd subsequence
happens at rate O(1/n).
Solution:
(
df % >%
filter ( n %% 2 == 1) % >%
ggplot ( aes ( x = n , y = Binomial )) +
5 geom _ line () +
geom _ hline ( aes ( yintercept = Limit [[1]]) , linetype = " dotted " ) +
scale _ x _ continuous ( name = " n " , trans = " log10 " ) +

Financial Mathematics 1 — Exercise


The exercise sheet will be discussed in two groups of Zoom exercise sessions on December 8, 2021, and in videos available on
the Moodle page. For details, see the course’s Moodle announcements. You should try to solve the exercises at home before
the exercise. Grading bonus and homework submission rules: https://www.moodle.tum.de/mod/page/view.php?id=1863336.
9

scale _ y _ continuous ( name = ~ E [ tilde ( Q )]( tilde ( P )[1]( T ))) +


theme _ minimal ()
10 ) / (
df % >%
filter ( n %% 2 == 1) % >%
ggplot ( aes ( x = n , y = Error * n )) +
geom _ line () +
15 scale _ x _ continuous ( name = " n " , trans = " log10 " ) +
scale _ y _ continuous ( name = ~ epsilon [ n ] * n ) +
theme _ minimal ()
)

f) Create a plot for n ∈ {1, 2, . . . , 1000} to show that the arbitrage-free price of the digital call option
with k = 1.1 · s0 converges to
 !
log (s0 /k) + r − 12 σ 2 T
Φ − √ .
σ T

Create a second and third plot to show that the convergence of the odd subsequence happens at

rate O(1/ n), but not at rate O(1/n).
Solution:
k <- s * 1.1

df <- tibble (
n = seq _ len (1 e3 ) ,
5 dt = ! ! tt / n ,
u _ dt = exp ( ! ! sigma * sqrt ( dt )) ,
d _ dt = 1 / u _ dt ,
r _ dt = ! ! r * dt ) % >%
rowwise () % >%
10 mutate (
Binomial = E ( S toc kP ric eD ist rib ut ion ( ! !s , r _ dt , u _ dt , d _ dt , n ) ,
fun = g , k = ! !k , r _ dt = r _ dt , n = n ) ,
Limit = pnorm (
0,
15 mean = log ( ! ! s / ! ! k ) + ( ! ! r - 0.5 * ! ! sigma ^2) * ! ! tt ,
sd = ! ! sigma * sqrt ( ! ! tt ) ,
lower . tail = FALSE ) *
exp ( - ! ! r * ! ! tt ) ,
Error = Limit - Binomial )
20

(
df % >%
ggplot ( aes ( x = n , y = Binomial )) +
geom _ line () +
25 geom _ hline ( aes ( yintercept = Limit [[1]]) , linetype = " dotted " ) +
scale _ x _ continuous ( name = " n " , trans = " log10 " ) +
scale _ y _ continuous ( name = ~ E [ tilde ( Q )]( tilde ( P )[1]( T ))) +
theme _ minimal ()
) / (
30 df % >%
filter ( n %% 2 == 1) % >%

Financial Mathematics 1 — Exercise


The exercise sheet will be discussed in two groups of Zoom exercise sessions on December 8, 2021, and in videos available on
the Moodle page. For details, see the course’s Moodle announcements. You should try to solve the exercises at home before
the exercise. Grading bonus and homework submission rules: https://www.moodle.tum.de/mod/page/view.php?id=1863336.
10

ggplot ( aes ( x = n , y = Error * n )) +


geom _ line () +
scale _ x _ continuous ( name = " n " , trans = " log10 " ) +
35 scale _ y _ continuous ( name = ~ epsilon [ n ] * n ) +
theme _ minimal ()
) / (
df % >%
filter ( n %% 2 == 1) % >%
40 ggplot ( aes ( x = n , y = Error * sqrt ( n ))) +
geom _ line () +
scale _ x _ continuous ( name = " n " , trans = " log10 " ) +
scale _ y _ continuous ( name = ~ epsilon [ n ] * sqrt ( n )) +
theme _ minimal ()
45 )

Financial Mathematics 1 — Exercise


The exercise sheet will be discussed in two groups of Zoom exercise sessions on December 8, 2021, and in videos available on
the Moodle page. For details, see the course’s Moodle announcements. You should try to solve the exercises at home before
the exercise. Grading bonus and homework submission rules: https://www.moodle.tum.de/mod/page/view.php?id=1863336.

You might also like