Skip to content

Instantly share code, notes, and snippets.

View mschauer's full-sized avatar

Moritz Schauer mschauer

View GitHub Profile
@mschauer
mschauer / blackscholes.jl
Last active February 11, 2026 14:19
Trying to use Black Scholes on market data estimating the volatility parameter
using Distributions
using Downloads
using DelimitedFiles
using MarketData
using Dates
"""
business_days(start_date, end_date)
@mschauer
mschauer / martingales.jl
Created January 28, 2026 08:29
Martingales by simulation (Julia)
###############################################################################
# Martingales by simulation (Julia)
#
# This script illustrates several facts discussed in lecture:
#
# (1) Brownian motion W_t has independent increments and is a martingale.
# (2) Additive Brownian stock model S_t = S_0 + μ t + σ W_t.
# (3) The conditional expectation (filtered value)
# V_t = E[(S_T - K)^+ | 𝔽_t]
# is a martingale in t (tower property).
@mschauer
mschauer / demo.jl
Last active December 30, 2025 14:00
Simple Gaussian DAG hill-climber (score-based) in Julia
using Random
rng = MersenneTwister(0)
n = 2000
# True SEM: X -> Y -> Z
true_adj = Bool[
0 1 0
0 0 1
0 0 0]
@mschauer
mschauer / fit.jl
Last active February 21, 2025 12:09
Risk neutral derivative pricing
using DelimitedFiles, GLMakie, Distributions
# Black-Scholes formula
normcdf(x) = cdf(Normal(), x)
function blcall(S0, K, r, T, σ)
B = exp(r*T)
F = S0 * B
d1 = log(F/K) /*sqrt(T)) + σ*sqrt(T)/2
(F*normcdf(d1) - K*normcdf((d1 - σ*sqrt(T))))/B
end
@mschauer
mschauer / intervention.jl
Created December 4, 2024 17:38
Z-Identification in Julia with CausalInference.jl
# Solving the problem in https://bsky.app/profile/p-hunermund.com/post/3lci6xojlmt25
using CausalInference, Graphs
# defining the graphical do-operator we need here
function do!(g, v)
for u in collect(inneighbors(g, v))
rem_edge!(g, u, v)
end
end
@mschauer
mschauer / Comp.jl
Last active December 4, 2024 11:55
Comparing CausalInference.pcalg with Associations.infer_graph
using CausalInference
using Associations: CorrTest, PC, Associations
using Test
using Graphs: SimpleDiGraph, Graphs, complete_graph
using StableRNGs
using LinearAlgebra, Random, Distributions
using CausalInference: pcalg, gausscitest, CausalInference
using Combinatorics
using Tables: table, istable
rng = StableRNG(123)
@mschauer
mschauer / bayesball.jl
Last active February 19, 2024 14:21
Bayes ball
using CausalInference, Graphs
V = [:U, :T, :P, :O]
ι = Dict(v=>i for (i,v) in enumerate(V))
g = digraph([1=>3, 2=>3, 3=>4, 2=>4, 1=>4])
# Can estimate total effect T=>O without observing U?
u = ι[:T]
v = ι[:O]
= Set{Int}()
@mschauer
mschauer / kalmanmean.jl
Created August 23, 2023 17:58
Fancy mean with Kalman filter
using Kalman
using Kalman.GaussianDistributions
using Statistics, LinearAlgebra
# prior for time 0
x0 = 0.0
P0 = floatmax(x0)
# observation operator
H = 1.0
@mschauer
mschauer / mixture.jl
Created May 18, 2023 15:36
Hidden correlation
using GLMakie
using Random
# mixture distribution
X(c) = rand() < c ? sqrt(rand()) : 1 - sqrt(rand())
# sample
Random.seed!(1);
A = [0:0.01:1;; X.(0:0.01:1)];
@mschauer
mschauer / quasigaussian.txt
Last active March 2, 2023 08:42
Quasi Gaussian numbers
0.0 0.0
-0.032984387220723596 0.030216400626819087
0.005532055967160396 -0.06303492443179701
0.04716487617405366 0.06151822897388728
-0.08816371845816047 -0.01559492041364278
0.0844812855043274 -0.05374007858781831
-0.02848102330289795 0.10594798706320867
-0.054631054889518714 -0.10518877181328493
0.1190544569384441 0.04347849672678073
-0.12429436989984163 0.05130690904254036