← All writing

Blog Formatting Guide

This post demonstrates every formatting feature available when writing blog posts. Use it as a reference when authoring new content. Posts are written in standard Markdown with support for inline HTML where needed.


Heading Levels

Headings are available from ## (H2) through ###### (H6). The post title is the H1, so body content should start at H2.

H2 — Section Heading

H3 — Subsection Heading

H4 — Topic Heading

H5 — Minor Heading
H6 — Smallest Heading

The raw markdown:

## H2 — Section Heading
### H3 — Subsection Heading
#### H4 — Topic Heading
##### H5 — Minor Heading
###### H6 — Smallest Heading

Inline Text Formatting

Standard inline styles:

  • Bold text**Bold text**
  • Italic text*Italic text*
  • Bold and italic***Bold and italic***
  • Strikethrough~~Strikethrough~~
  • Inline code`Inline code`
  • Highlighted text<mark>Highlighted text</mark>
  • Superscript<sup>Superscript</sup> (e.g. E = mc2)
  • Subscript<sub>Subscript</sub> (e.g. H2O)
  • Ctrl + Shift + P — for keyboard shortcuts using <kbd>
  • SDE — abbreviation with tooltip using <abbr title="...">

Inline link: Visit Simudyne for more information.

[Simudyne](https://simudyne.com)

Link with title attribute (hover tooltip): Read the Astro documentation to learn more.

[Astro documentation](https://docs.astro.build "Astro Docs")

Autolinked URL: https://simudyne.com

Email link: Contact us at hello@simudyne.com.


Lists

Unordered List

  • First item
  • Second item
  • Third item with more detail explaining the point across a longer line of text to show wrapping behaviour

Ordered List

  1. Initialise the model parameters
  2. Calibrate against historical data
  3. Run Monte Carlo simulations
  4. Extract risk and trend metrics

Nested Lists

  • Model Discovery
    • Agent proposes an SDE
    • Calibration via JAX + Diffrax
    • Critique agent reviews fit
      • Statistical metrics evaluated
      • Feedback loop to builder
  • Signal Extraction
    • Monte Carlo sampling
    • Risk metric computation

Task / Checkbox List

  • Define model architecture
  • Implement calibration pipeline
  • Run full backtest suite
  • Write up results

Blockquotes

Simple blockquote:

A forecast tells you where the centre of the distribution is. A simulation tells you how wide it is, where the tails are, and what happens when things go wrong.

Blockquote with attribution:

The best way to predict the future is to simulate it.

SIMUDYNE RESEARCH

Nested blockquote:

Agent-based models capture emergent behaviour that top-down models miss.

This is particularly important in systemic risk analysis where feedback loops between institutions drive outcomes.

Multi-paragraph blockquote:

Monte Carlo methods rely on repeated random sampling to obtain numerical results. The underlying concept is to use randomness to solve problems that might be deterministic in principle.

They are especially useful in cases where a closed-form solution is not available or is too complex to derive analytically.


Code Blocks

Inline Code

Use model.fit(data) to calibrate the model. The parameter n_simulations controls the number of Monte Carlo paths.

Python

import jax.numpy as jnp
from diffrax import diffeqsolve, ODETerm, Tsit5

def geometric_brownian_motion(mu: float, sigma: float, S0: float, T: float, n_steps: int):
    """Simulate GBM using Euler-Maruyama discretisation."""
    dt = T / n_steps
    prices = [S0]

    for _ in range(n_steps):
        dW = jnp.sqrt(dt) * jax.random.normal(key, shape=())
        S_new = prices[-1] * jnp.exp((mu - 0.5 * sigma**2) * dt + sigma * dW)
        prices.append(S_new)

    return jnp.array(prices)

JavaScript / TypeScript

interface SimulationConfig {
  nPaths: number;
  nSteps: number;
  timeHorizon: number;
}

function runSimulation(config: SimulationConfig): number[][] {
  const { nPaths, nSteps, timeHorizon } = config;
  const dt = timeHorizon / nSteps;

  return Array.from({ length: nPaths }, () =>
    generatePath(nSteps, dt)
  );
}

Shell Commands

# Clone and run the blog locally
git clone https://github.com/simudyne/simudyne-blog.git
cd simudyne-blog
npm install
npm run dev

JSON

{
  "model": "geometric_brownian_motion",
  "parameters": {
    "mu": 0.05,
    "sigma": 0.2,
    "S0": 100.0,
    "T": 1.0
  },
  "simulations": 10000
}

YAML (e.g. frontmatter reference)

---
title: "Your Post Title"
description: "A short summary for the listing page and SEO."
date: 2026-03-01
author: "Author Name"
tags: ["topic-a", "topic-b"]
---

Diff

- model = BlackScholes(sigma=0.2)
+ model = HestonModel(v0=0.04, kappa=2.0, theta=0.04, sigma_v=0.3, rho=-0.7)

Tables

Simple Table

ModelParametersFit (R²)Profit
GBM20.72+3.1%
Heston50.89+7.4%
SABR40.85+5.8%
Jump Diffusion40.91+8.2%

Aligned Columns

MetricDescriptionFormula
VaRValue at RiskP(L > VaR) = α
CVaRConditional VaRE[L | L > VaR]
SharpeRisk-adjusted return(R − Rf) / σ
MDDMaximum Drawdownmax peak-to-trough

Images

Standard Image

Images are placed in public/images/ and referenced with an absolute path:

Monte Carlo simulation chart showing 95% confidence interval

![Alt text description](/images/placeholder-chart.svg)

Image with Caption (HTML)

For proper figure + caption treatment, use HTML:

Monte Carlo price simulation with confidence bands
Figure 1: Simulated price trajectories with 95% confidence interval. The shaded region represents the range of likely outcomes.
<figure>
  <img src="/images/placeholder-chart.svg" alt="Description" />
  <figcaption>Figure 1: Your caption here.</figcaption>
</figure>

Callout Boxes

Callout boxes use HTML with specific classes. Four variants are available: info, warning, success, and danger.

Note

This is an informational callout. Use it for supplementary context, tips, or cross-references that support the main text.

Warning

This is a warning callout. Use it to flag caveats, assumptions, or areas where the reader should exercise caution.

Result

This is a success callout. Use it to highlight positive outcomes, key findings, or confirmed results.

Important

This is a danger callout. Use it for critical information, breaking changes, or security considerations.

<div class="callout info">
  <div class="callout-title">Note</div>
  <p>Your callout content here.</p>
</div>

Available variants: info, warning, success, danger.


Definition Lists

Use HTML <dl> for term/definition pairs:

Agent-Based Model (ABM)
A computational model that simulates the actions and interactions of autonomous agents to assess their effects on the system as a whole.
Stochastic Differential Equation (SDE)
A differential equation in which one or more of the terms is a stochastic process, resulting in a solution that is itself a random process.
Monte Carlo Simulation
A method that uses repeated random sampling to obtain the distribution of an unknown probabilistic entity.
<dl>
  <dt>Term</dt>
  <dd>Definition of the term.</dd>
</dl>

Horizontal Rules

Use --- on its own line to insert a thematic break:


The content continues after the rule.


Mathematical Notation

For inline mathematical expressions, use HTML entities and Unicode:

  • The drift-diffusion equation: dS = μS dt + σS dW
  • Expected value: E[X] = Σ x·P(x)
  • Normal distribution: X ~ N(μ, σ²)
  • Greek letters: α, β, γ, δ, ε, θ, λ, σ, τ, φ, ω

For more complex expressions, write them as code:

dS(t) = μ · S(t) · dt + σ · S(t) · dW(t)

where:
  S(t)  = asset price at time t
  μ     = drift coefficient (expected return)
  σ     = volatility coefficient
  W(t)  = standard Wiener process
Tip

If full LaTeX rendering is needed, consider adding the remark-math + rehype-katex plugins to the Astro config.


Embedding Rich Content

Collapsible Section

Click to expand: full model specification

The Heston stochastic volatility model is defined by the coupled SDEs:

dS(t) = μ · S(t) · dt + √v(t) · S(t) · dW₁(t)
dv(t) = κ(θ − v(t)) · dt + σᵥ · √v(t) · dW₂(t)

Where the Wiener processes are correlated: E[dW₁ · dW₂] = ρ · dt.

Parameters:

  • κ = 2.0 (mean-reversion speed)
  • θ = 0.04 (long-run variance)
  • σᵥ = 0.3 (vol of vol)
  • ρ = −0.7 (correlation)
  • v₀ = 0.04 (initial variance)
<details>
<summary>Click to expand: section title</summary>

Your hidden content here (supports full markdown).

</details>

Embedded Video Placeholder

To embed a video, use a standard iframe:

<iframe
  width="100%"
  height="400"
  src="https://www.youtube.com/embed/VIDEO_ID"
  frameborder="0"
  allowfullscreen
  style="border-radius: 6px; margin: 1.5em 0;">
</iframe>

Combined Example

Below is a realistic excerpt combining several formatting features as they would appear in an actual post:

Task 2 — Calibration and Iterative Critique

The agent implements each proposed SDE in JAX using the Diffrax library, enabling rapid GPU-accelerated calibration.

from diffrax import diffeqsolve, Euler

solution = diffeqsolve(
    terms=sde_term,
    solver=Euler(),
    t0=0.0,
    t1=1.0,
    dt0=0.001,
    y0=initial_state,
)

After calibration, we evaluate model fit using the following metrics:

MetricTargetSonnet 3.7Llama 3.3
> 0.850.910.78
RMSE< 2.51.83.2
AIClowest-142-98
Finding

Sonnet 3.7 consistently achieved the best goodness-of-fit across all metrics, while also producing code that ran without manual intervention.

Models that fit the data poorly will produce poor trading decisions downstream. There is no shortcut — the quality of the underlying model matters.

SIMUDYNE RESEARCH


Quick Reference

FeatureSyntaxNotes
Bold**text**
Italic*text*
Code`code`
Link[text](url)
Image![alt](path)Store in public/images/
Heading## TitleH2 through H6
Blockquote> textSupports nesting
Ordered list1. item
Unordered list- item
TablePipe syntaxSee examples above
Rule---
CalloutHTML <div class="callout info">info warning success danger
FigureHTML <figure>For image + caption
CollapseHTML <details>Expandable sections
Keyboard<kbd>key</kbd>
Highlight<mark>text</mark>