5D Library › Credit Cycles, Self-Organised Criticality and the Statistical Physics of Market Phase Transitions · 中文
Chapter 8 Practice and a Pre-Registered Trial
Part 1 A four-step cycle and volatility checklist
The first seven chapters can be condensed into a checklist for regular use. First, what it is not: it is not a buy or sell signal, it cannot identify tops or bottoms, and it cannot tell you when a crash will come. The first three steps only record the background state of the market, and Chapter 6 showed that there is no reliable evidence that indicators of this kind can time the market in advance. The real point is the fourth step: whatever the market does, can your own positions withstand it?
- Price structure and volume confirmation. Record where the index stands within its recent range and whether the accompanying volume is above or below its recent average. Nothing in this book shows that such readings predict what comes next; treat them as background, and the question to ask yourself is: if the recent move does not last, what happens to my positions?
- The position of the volatility index, and “rising together”. Record the percentile of the volatility index within the past year and how many recent days the index and the volatility index rose together. This too is background, not a signal; the question it raises is: would my portfolio lose at the same time as volatility rises (for example through written options or leveraged products)?
- Option implied-volatility rank and skew. Where does at-the-money implied volatility sit within the past year’s range (IV rank)? Is the implied-volatility difference between out-of-the-money puts and calls high or low relative to its own history? Remember that the skew is a risk-neutral price that includes a risk premium. (Chapter 5)
- Extreme-scenario stress test. If the index fell 20 % in one day, or slid 20 % over a month, or swung violently and ended where it started, how much would your portfolio lose? Would any part of it be sold by force (margin loans, leveraged products, written options)? Without selling any asset, how many months of spending would your cash cover? (Chapters 2–4)
Calculation
Apply the checklist to fictional data: a year of an index and of a volatility index (simulated), a fictional option quote, and a hypothetical portfolio of 60 % broad index fund, 15 % 2x daily-leveraged index fund and 25 % cash, with monthly spending equal to 1 % of the portfolio.
# The four-step cycle-and-volatility checklist applied to FICTIONAL data. It describes the state of
# the market and, above all, how fragile one's own portfolio is; it is not a timing signal.
import math, random, statistics as st
rnd = random.Random(30)
# A fictional year of an equity index and of a volatility index (OU in logs, as in Chapter 5)
idx, vol, x = [100.0], [16.0], math.log(16.0)
for t in range(249):
x = math.log(17) + 0.977 * (x - math.log(17)) + 0.065 * rnd.gauss(0, 1)
r = 0.0006 - 0.004 * (x - math.log(17)) + math.exp(x) / 100 / math.sqrt(252) * rnd.gauss(0, 1)
idx.append(idx[-1] * (1 + r)); vol.append(math.exp(x))
top = max(idx)
for k in range(3): # the last three days: a push to a new high
idx.append(max(idx[-1], top) * 1.006); vol.append(vol[-1] * (1.03 if k else 0.99))
volume = [1.0 + 0.3 * rnd.random() for _ in idx]
volume[-3:] = [0.85, 0.82, 0.80] # ... on thin volume
# 1. Price structure and volume confirmation
hi20 = max(idx[-23:-3])
new_high = max(idx[-3:]) > hi20
vol_ok = st.fmean(volume[-3:]) > st.fmean(volume[-23:-3])
print(f"1. index {idx[-1]:.1f}; new 20-day high in the last 3 days: {new_high};"
f" confirmed by above-average volume: {vol_ok}")
# 2. Volatility-index percentile and 'rising together' days
pct = sum(v < vol[-1] for v in vol) / len(vol)
both_up = sum(1 for t in range(-10, 0) if idx[t] > idx[t - 1] and vol[t] > vol[t - 1])
print(f"2. volatility index {vol[-1]:.1f}, percentile of the past year {pct:.0%};"
f" days in the last 10 when index and volatility index both rose: {both_up}")
# 3. Implied-vol rank and skew of a fictional option chain on the index
atm_iv = 0.95 * vol[-1] / 100 # fictional chain priced near the index level
iv_lo, iv_hi = 0.95 * min(vol) / 100, 0.95 * max(vol) / 100
put25, call25, skew_hist = 0.198, 0.137, [0.032, 0.041, 0.038, 0.045, 0.050, 0.036, 0.044, 0.039]
rank = (atm_iv - iv_lo) / (iv_hi - iv_lo)
skew = put25 - call25
print(f"3. at-the-money implied vol {atm_iv:.1%}, IV rank {rank:.0%} (range {iv_lo:.1%}-{iv_hi:.1%});"
f" 25-delta put minus call {skew:+.1%} vs past median {st.median(skew_hist):+.1%}")
# 4. Stress test of a hypothetical portfolio: 60 % index fund, 15 % 2x daily-leveraged index fund,
# 25 % cash; monthly spending need 1 % of the portfolio
def lev_path(daily, L=2.0):
v = 1.0
for r in daily: v *= 1 + L * r
return v - 1
scen = {"gap: index -20 % in one day": [-0.20],
"slide: -20 % in 20 days, steady": [0.8 ** (1 / 20) - 1] * 20,
"chop: flat after 20 days, +-4 % daily": [0.04, -0.04 / 1.04] * 10}
for name, path in scen.items():
ix = math.prod(1 + r for r in path) - 1
loss = 0.60 * ix + 0.15 * lev_path(path)
print(f"4. {name:36s}: index {ix:+.1%}, 2x fund {lev_path(path):+.1%},"
f" portfolio {loss:+.1%}")
print(f" cash covers {0.25 / 0.01:.0f} months of spending without selling anything; no margin loan, so no forced sale")
# 1. index 136.8; new 20-day high in the last 3 days: True; confirmed by above-average volume: False
# 2. volatility index 19.6, percentile of the past year 71%; days in the last 10 when index and volatility index both rose: 3
# 3. at-the-money implied vol 18.6%, IV rank 41% (range 10.5%-30.5%); 25-delta put minus call +6.1% vs past median +4.0%
# 4. gap: index -20 % in one day : index -20.0%, 2x fund -40.0%, portfolio -18.0%
# 4. slide: -20 % in 20 days, steady : index -20.0%, 2x fund -36.2%, portfolio -17.4%
# 4. chop: flat after 20 days, +-4 % daily: index +0.0%, 2x fund -3.0%, portfolio -0.5%
# cash covers 25 months of spending without selling anything; no margin loan, so no forced saleIn this fictional data the index makes a new 20-day high in the last three days, but on volume below the preceding average, an “unconfirmed” new high; the volatility index is at the 71st percentile of the past year and rose together with the index on 3 of the last 10 days; the implied-volatility rank is about 41 % and the skew is above its own historical median. These are only descriptions and support no conclusion.
The results of the fourth step are more useful. If the index falls 20 % in a day, the 2x leveraged fund loses 40 % and the portfolio 18 %. If the same 20 % fall happens smoothly over 20 days, the 2x fund loses only about 36 %: in a one-way trend, the compounding of daily rebalancing slightly reduces the loss. But if the index swings violently for 20 days and ends where it began, the 2x fund still loses about 3 %: this is the “volatility decay” of daily-rebalanced leveraged products in choppy markets, whose path dependence Cheng and Madhavan describe systematically (Cheng and Madhavan 2009). This portfolio has no margin loan and cannot be forced to sell; its 25 % cash covers about 25 months of spending.
Note
This checklist is not a timing tool. The “signals” of the first three steps have not been shown in this book to have any predictive power, and the thresholds and readings given are only conventions for record-keeping. The scenarios of the fourth step are also illustrative: real extremes can be worse, and many assets can fall together (Chapter 3). If any part of your portfolio would be sold by force in a fall, that part is what this checklist most needs you to look at. For personal financial decisions, consult a licensed, independent professional.
Part 2 Protocol for a pre-registered randomised controlled experiment
Question
When leveraged funds or option-writing products are presented to individual investors, what is usually shown is the average annual return of the past few years. If the largest historical drawdowns and a set of simulated outcomes from a fat-tailed model are shown as well, does the share people allocate to these products change?
Existing evidence and direction
Earlier studies show that the way information is presented changes how people understand risk and what they choose, but not always in the direction of “more caution”. Benartzi and Thaler found that when participants were shown the distribution of long-run returns (rather than single-year outcomes), they were more willing to hold stocks (Benartzi and Thaler 1999). Kaufmann, Weber and Haisley found that both letting participants “experience” a return distribution by repeated sampling and giving them a graphical risk tool raised their allocations to the risky asset, while more accurate recall of returns and loss probabilities was due mainly to the risk tool (Kaufmann et al. 2013). Bradbury, Hens and Zeisberger likewise found that simulated experience changed investors’ understanding of risk and return and their choices (Bradbury et al. 2015). This trial therefore assumes no direction and uses a two-sided test.
Design
| Element | Specification |
|---|---|
| Participants | Adults aged 21 or over who have invested in at least one listed security or fund, recruited through independent online professional survey panels; not from the clients, partners or community members of the author’s businesses |
| Task | Build a portfolio from a hypothetical budget of 100,000 units, choosing among cash, a broad index fund, a 2x daily-leveraged index fund and a put-writing (“short volatility”) fund. So that choices have real consequences, some participants are drawn at random and paid a reward in proportion to how their portfolio performs on a pre-generated simulated path |
| Randomisation | 1:1, stratified by “has / has not traded leveraged or option products” |
| Arm A (usual disclosure) | A table of the average annual returns of the four product categories over past years, labelled as index back-tests or simulated figures; no data of any real product is used |
| Arm B (tail disclosure) | The same table of average returns plus the largest drawdowns of the two leveraged product categories in index back-tests (also labelled as back-test figures) and 1,000 simulated 5-year paths from a fat-tailed (GARCH) model, with the worst 5 % marked |
| Blinding | Participants are told only “build a portfolio”; they do not know that there are two disclosures or what the hypothesis is; the experiment runs online automatically; analysts do not know which code is which arm until unblinding |
| Primary outcome | Share of the portfolio allocated to the two leveraged products (0–100 %) |
| Secondary outcomes | Participants’ estimate of the 2x fund’s largest drawdown within 5 years; confidence in their choice; share of cash; accuracy on the comprehension questions |
| Analysis | Linear regression on arm, with the stratification variable as a covariate; two-sided |
Sample size
Calculation
# Sample size for the pre-registered randomised experiment. Participants build a hypothetical
# 100,000-unit portfolio from cash, a broad index fund, a 2x daily-leveraged index fund and a
# put-writing ("short volatility") fund, after seeing ONE of two disclosures about the two
# leveraged products:
# A (usual): average annual returns over past years, in a table (labelled index back-tests)
# B (tail): the same averages PLUS the worst back-test drawdowns and 1,000 simulated 5-year paths
# from a fat-tailed (GARCH) model, shown as a fan of outcomes with the 5 % worst marked
# Primary outcome: share of the portfolio put into the two leveraged products (0-100 %).
# Effect in SD units; normal approximation; two-sided alpha 0.05 (the direction is not assumed:
# earlier studies found that showing simulated outcomes can INCREASE risk taking).
import math
from statistics import NormalDist
N = NormalDist()
def n_per_arm(d, alpha=0.05, power=0.90):
return math.ceil(2 * (N.inv_cdf(1 - alpha / 2) + N.inv_cdf(power)) ** 2 / d ** 2) + 1
for d in (0.20, 0.25, 0.30, 0.40):
print(f"standardised effect {d:.2f}: {n_per_arm(d, power=0.8)} per arm for 80 % power, {n_per_arm(d)} for 90 %")
n = n_per_arm(0.30)
rec = math.ceil(n / 0.85)
print(f"chosen: 0.30 SD, 90 % power -> {n} analysable per arm; allowing 15 % exclusions"
f" (failed attention or comprehension checks) recruit {rec} per arm, {2 * rec} in all")
# Randomisation is stratified by prior experience with leveraged or option products (yes / no);
# stratum enters the analysis as a covariate.
# standardised effect 0.20: 394 per arm for 80 % power, 527 for 90 %
# standardised effect 0.25: 253 per arm for 80 % power, 338 for 90 %
# standardised effect 0.30: 176 per arm for 80 % power, 235 for 90 %
# standardised effect 0.40: 100 per arm for 80 % power, 133 for 90 %
# chosen: 0.30 SD, 90 % power -> 235 analysable per arm; allowing 15 % exclusions (failed attention or comprehension checks) recruit 277 per arm, 554 in allWith a smallest effect of interest of 0.30 standard deviations and 90 % power, each arm needs 235 analysable participants; allowing for about 15 % of participants to be excluded for failing attention or comprehension checks, each arm recruits 277, 554 in all.
Decision rule
Calculation
# Decision rule, fixed before data collection. d = arm B (tail disclosure) minus arm A (average
# returns only) in the share allocated to leveraged products, standardised, with its 95 % CI.
# Confirmatory test: is d different from zero (two-sided alpha 0.05)? The trial is powered (90 %) to
# detect d = 0.30 SD, the smallest effect of interest; how the CI sits relative to +-0.30 is reported
# descriptively, not as a second test.
# Validity check: in arm B at least 70 % must correctly answer "In the simulations, how often did the
# 2x fund lose more than half its value within 5 years?" - otherwise the disclosure was not understood.
SESOI = 0.30
def verdict(d, lo, hi, understood):
if understood < 0.70:
return f"effect {d:+.2f}: NOT INTERPRETABLE - only {understood:.0%} of arm B understood the disclosure"
if hi < 0:
v = "the tail disclosure REDUCES leveraged allocation"
elif lo > 0:
v = "the tail disclosure INCREASES leveraged allocation"
else:
v = "no difference shown"
if lo >= -SESOI and hi <= SESOI:
size = "CI within +-0.30: any effect is smaller than the smallest effect of interest"
elif hi <= -SESOI or lo >= SESOI:
size = "CI wholly beyond 0.30 in size"
else:
size = "CI includes effects both above and below 0.30 in size"
return f"effect {d:+.2f} ({lo:+.2f} to {hi:+.2f}): {v}; descriptively, {size}"
for r in ((-0.48, -0.65, -0.31, 0.84), (-0.20, -0.37, -0.03, 0.81), (0.04, -0.13, 0.21, 0.88),
(0.22, 0.05, 0.39, 0.79), (-0.40, -0.57, -0.23, 0.55)):
print(verdict(*r))
print("Secondary outcomes (expected drawdown, confidence, choice of the cash buffer) are reported with intervals, never decisive.")
# effect -0.48 (-0.65 to -0.31): the tail disclosure REDUCES leveraged allocation; descriptively, CI wholly beyond 0.30 in size
# effect -0.20 (-0.37 to -0.03): the tail disclosure REDUCES leveraged allocation; descriptively, CI includes effects both above and below 0.30 in size
# effect +0.04 (-0.13 to +0.21): no difference shown; descriptively, CI within +-0.30: any effect is smaller than the smallest effect of interest
# effect +0.22 (+0.05 to +0.39): the tail disclosure INCREASES leveraged allocation; descriptively, CI includes effects both above and below 0.30 in size
# effect -0.40: NOT INTERPRETABLE - only 55% of arm B understood the disclosure
# Secondary outcomes (expected drawdown, confidence, choice of the cash buffer) are reported with intervals, never decisive.The example results are invented. If fewer than 70 % of arm B answer the comprehension question correctly (“In the simulations, in what share of paths did the 2x fund lose more than half its value within 5 years?”), the tail disclosure was not understood and the report says “not interpretable” whatever the result. There is only one confirmatory conclusion: whether the effect differs from zero at two-sided , and in which direction. The sample size gives 90 % power to detect an effect of 0.30 standard deviations; where the confidence interval sits relative to ±0.30 is reported descriptively, not as a second test. If arm B allocates more to leveraged products, the decision rule reports that just as plainly.
What this trial cannot show
First, the portfolio is hypothetical; even with partial rewards, participants do not bear real financial consequences, and behaviour in real accounts may differ. Second, the trial tests one specific form of disclosure and says nothing about other forms (such as written warnings or interactive simulations). Third, the trial compares allocation shares only and cannot say which allocation is “better”: a smaller allocation to leveraged products is not necessarily better; that depends on each person’s finances and goals. Fourth, the simulated paths come from one particular model, which may itself under- or overstate real tail risk (Chapter 4).
Ethics and conflicts of interest
The trial must be approved by an independent ethics committee, obtain informed consent, and register its protocol and analysis plan before the first participant is enrolled (Nosek et al. 2018). After the study, participants are told its purpose and the content of both disclosures. The products in the materials are general categories, and no name or data of any real product is used.
Disclosure
The author founded and runs the influencer-marketing and digital-marketing agencies Asia Influencer X and Yafu Global. He holds no financial-services licence and is not a licensed investment adviser. The book links to and recommends no broker, fund, trading course, signal service or financial product; the “leveraged funds” and “options” it mentions are general categories, not specific products. The Chapter 8 trial is designed to be run and analysed by researchers independent of the author’s business; all the code and the study protocol are published openly for anyone to check. To limit the influence of these interests: participants are not recruited from the clients, partners or community members of the author’s businesses; the stimulus materials and analysis code are published before enrolment; and the results, data and code will be published whatever the results. The author also uses this book and his own scripts (for personal market-watching study, not sold or offered to anyone) as a methodological reference for his community courses, the 5D Ascension Cards (Dimensional Shift Card Decks) and the Yafu AI knowledge base; he holds no financial-services licence and provides no investment advice, discretionary account management or trading-signal service.
References
Fan, Y. (2026). Credit Cycles, Self-Organised Criticality and the Statistical Physics of Market Phase Transitions: From Minsky's Financial Instability Hypothesis and Sandpile Power-Law Avalanches to Implied-Volatility Skew, Read Beside Classical Chinese Thought on Rise and Decline [信贷周期、自组织临界性与市场相变的统计物理] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23754711 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).