5D Library › Cross-Cultural Contracts, Real Options and Game Theory of Southeast Asian Market Entry · 中文

Chapter 2 Real Options and Optimal Stopping: the Value of a Stop-Loss and the Signal It Sends

“Test small, and leave if it fails”

Many Chinese internet companies going abroad follow a familiar routine: put a limited budget and a few people into a market and run it for three months; if the numbers are good, scale up; if not, pull out. The routine is often called “small fast steps” or a “stop-loss line”. This chapter asks two questions: in terms of expected value, when is this routine right? And what does it mean for a partner?

Investing under uncertainty: the option view

The traditional net-present-value rule says: invest if a project’s present value exceeds its cost, otherwise not. McDonald and Siegel, Dixit and Pindyck and others showed that when an investment is irreversible, the future is uncertain and the decision can be delayed or staged, this rule goes systematically wrong, because it ignores the value of waiting to see (McDonald and Siegel 1986; Dixit and Pindyck 1994). That value has the same form as a financial option, hence the name real option:

  • Abandonment option: once a project is under way, the firm can leave if things go badly and recover part of its outlay as salvage. This is a put option.
  • Expansion option (staged entry): first invest a small pilot, keeping the right to invest a large sum later. This is a call option, and the pilot’s cost is the option premium.

Evidence

Kogut interpreted the joint venture itself as a real option: through a joint venture a firm enters an uncertain market with a small outlay, keeping the right to expand later or to buy out its partner. Using data on US manufacturing joint ventures, he found that partners were more likely to acquire a venture when its product market grew unexpectedly (Kogut 1991).

The value of an option rises with uncertainty: the less certain the future, the more the right to “wait and see” is worth. But waiting has a cost: while you watch, the market’s earnings go to someone else, and competitors may take the position first.

Commit at once, or enter in stages?

Calculation

A binomial tree (Cox et al. 1979) compares three approaches: commit fully with no exit; commit fully but keep the right to leave at any month for a salvage value; or pay a pilot fee and keep, for 12 months, the right to invest the rest. The cost of waiting is a 1 % monthly “payout” that the staged entrant forgoes until it scales.

# Commit now, or enter in stages? A binomial real-options model (Cox, Ross & Rubinstein 1979;
# Dixit & Pindyck 1994). The present value V of a market's future cash flows moves on a monthly
# binomial tree with annual volatility sigma. Full entry costs I = 100 and V0 = 104 (plain NPV +4).
#   Commit:  pay 100 now and receive V; the firm may also abandon at any month for salvage S = 30.
#   Staged:  pay a pilot of 8 now, keeping for 12 months the right to pay the remaining 95 for V.
# Waiting is not free: the project pays out 1 % of V a month, which the staged firm forgoes until it
# scales. Risk-free rate 0.4 % a month. Illustrative numbers, not estimates for any market.
import math

R, Q = 0.004, 0.01

def american(V0, sigma, months, payoff):
    """Value of the right to receive payoff(V) at any month up to `months` (risk-neutral tree)."""
    u = math.exp(sigma * math.sqrt(1 / 12)); d = 1 / u
    p = (1 + R - Q - d) / (u - d)
    vals = [payoff(V0 * u ** j * d ** (months - j)) for j in range(months + 1)]
    for step in range(months - 1, -1, -1):
        vals = [max(payoff(V0 * u ** j * d ** (step - j)), (p * vals[j + 1] + (1 - p) * vals[j]) / (1 + R))
                for j in range(step + 1)]
    return vals[0]

I, S, PILOT, REST, V0 = 100, 30, 8, 95, 104
print("annual volatility | commit, no exit | commit + exit option | staged entry | best of the three")
for sigma in (0.10, 0.25, 0.40, 0.60, 0.80):
    plain = V0 - I
    commit = plain + american(V0, sigma, 36, lambda V: max(S - V, 0))     # abandonment put
    staged = american(V0, sigma, 12, lambda V: max(V - REST, 0)) - PILOT   # expansion call - pilot
    best = max((("commit", commit), ("staged", staged), ("stay out", 0.0)), key=lambda x: x[1])[0]
    print(f"{sigma:17.2f} | {plain:15.1f} | {commit:20.1f} | {staged:12.1f} | {best}")
# annual volatility | commit, no exit | commit + exit option | staged entry | best of the three
#              0.10 |             4.0 |                  4.0 |          1.0 | commit
#              0.25 |             4.0 |                  4.0 |          3.8 | commit
#              0.40 |             4.0 |                  4.9 |          9.1 | staged
#              0.60 |             4.0 |                  7.6 |         16.2 | staged
#              0.80 |             4.0 |                 11.1 |         23.1 | staged
The value of three entry strategies as the volatility of the market’s value changes. At low volatility committing at once is best; above an annual volatility of about 0.3 the value of staged entry rises quickly.

In this example the project’s plain NPV is +4. When volatility is low (annual 0.10–0.25), committing at once is the best of the three: there is little uncertainty, so neither the pilot fee nor the earnings lost while waiting pay off. At a volatility of 0.40 the value of staged entry (9.1) exceeds committing (4.9), and the gap widens as volatility rises. The abandonment option has value too, but less than staged entry here, because the salvage is only 30 % of the investment.

The result supports staged trial in volatile, unknown markets, with two qualifications. First, it depends on the volatility really being high; in a mature, fairly predictable market, “test for three months first” may only clear the way for competitors. Second, the model contains one firm and no partner. In reality, the right to leave that you keep often means that your partner bears the consequences when you use it.

When to leave: optimal stopping

“A three-month stop-loss line” is one particular exit rule. Is it the best one? This is an optimal stopping problem: each period you may continue (observe one more period, bearing its cost or collecting its return) or stop. Dynamic programming gives the general method: work backwards from the last period, and in each period compare the value of stopping with the expected value of continuing, taking the larger. This is the Bellman equation (Bellman 1957):

Vt(p)=max⁡{0,𝔼[xt+Vt+1(p′)|p]}V_t(p) = \max\Big\{\,0,\; \mathbb{E}\big[x_t + V_{t+1}(p')\,\big|\,p\big]\Big\}

where pp is the firm’s belief that this is a good market, xtx_t the period’s operating result and p′p' the belief updated by Bayes’ rule after seeing it.

Calculation

A new market is either good (+3 a month) or bad (−2 a month), and each month’s result carries noise with standard deviation 4, so a single month says almost nothing. Before entry the probability of a good market is 0.4, and entry costs 10. The test ends after 24 months: a good market is then worth 40 to keep, and winding down a bad one costs another 15. The Bellman equation gives the optimal exit threshold, and 20,000 simulations compare several rules.

# When to stop a market test: Bayesian optimal stopping solved by dynamic programming (Bellman).
# A new market is either good (monthly contribution +3) or bad (-2); each month's result is that
# mean plus noise with SD 4, so one month says little. Prior P(good) = 0.4. Entry costs 10.
# Each month the firm either stays (earns the month's result, updates its belief) or exits (value 0;
# spending already made is sunk). After 24 months the test is over: a firm still in the market keeps
# it, worth 40 if good and -15 if bad (the bad case still has wind-down costs). Units: arbitrary.
import math, random

G, B, SD, P0, ENTRY, T = 3.0, -2.0, 4.0, 0.4, 10.0, 24
TERM_G, TERM_B = 40.0, -15.0
GRID = [i / 400 for i in range(401)]
NODES = [(-3 + 6 * k / 60) for k in range(61)]                 # quadrature on a standard normal
W = [math.exp(-z * z / 2) for z in NODES]; SW = sum(W); W = [w / SW for w in W]

def update(p, x):
    lg = math.exp(-(x - G) ** 2 / (2 * SD ** 2)); lb = math.exp(-(x - B) ** 2 / (2 * SD ** 2))
    return p * lg / (p * lg + (1 - p) * lb)

def interp(vals, p):
    i = min(int(p * 400), 399); f = p * 400 - i
    return vals[i] * (1 - f) + vals[i + 1] * f

V = [p * TERM_G + (1 - p) * TERM_B for p in GRID]                 # value at the end of month T
threshold = []
for t in range(T - 1, -1, -1):                                   # Bellman: V_t(p) = max(0, E[x + V_{t+1}(p')])
    new, cut = [], None
    for p in GRID:
        cont = 0.0
        for z, w in zip(NODES, W):
            for mean, pm in ((G, p), (B, 1 - p)):
                x = mean + SD * z
                cont += w * pm * (x + interp(V, update(p, x)))
        new.append(max(0.0, cont))
        if cut is None and cont > 0: cut = p
    V = new; threshold.append((t, cut))
print("exit when P(good) falls below:", ", ".join(f"month {t}: {c:.2f}" for t, c in sorted(threshold)
                                                    if t in (1, 3, 6, 12, 18, 23)))
print(f"value of entering with the optimal stopping rule: {interp(V, P0) - ENTRY:+.1f}")

def simulate(policy, runs=20000, seed=1):
    rng = random.Random(seed); total = 0.0; exits = 0
    cut = dict(threshold)
    for _ in range(runs):
        good = rng.random() < P0; p = P0; value = -ENTRY; out = False
        for t in range(T):
            if policy(t, p, cut): out = True; exits += 1; break
            x = (G if good else B) + rng.gauss(0, SD); value += x; p = update(p, x)
        if not out: value += TERM_G if good else TERM_B
        total += value
    return total / runs, exits / runs

pols = {"commit for 24 months, no exit": lambda t, p, c: False,
        "3-month test: exit at month 3 if P(good) < 0.4": lambda t, p, c: t == 3 and p < 0.4,
        "optimal (Bellman) rule": lambda t, p, c: p < c[t]}
for name, pol in pols.items():
    v, e = simulate(pol)
    print(f"{name:48s} mean value {v:+6.1f}   share of runs that exit {e:.0%}")
print("never enter                                      mean value   +0.0")
# exit when P(good) falls below: month 1: 0.05, month 3: 0.05, month 6: 0.06, month 12: 0.07, month 18: 0.09, month 23: 0.28
# value of entering with the optimal stopping rule: +27.9
# commit for 24 months, no exit                    mean value   -2.7   share of runs that exit 0%
# 3-month test: exit at month 3 if P(good) < 0.4   mean value  +20.9   share of runs that exit 57%
# optimal (Bellman) rule                           mean value  +28.9   share of runs that exit 61%
# never enter                                      mean value   +0.0

Three results stand out.

First, committing for 24 months with no exit has a negative expected value (−2.7), while allowing exit turns entry into the same market positive. The right to stop creates value in itself: it truncates the losses in a bad market and keeps the gains in a good one. This is the mathematics behind “test small”.

Second, the simple rule “check once at month 3 and leave if the belief is below 0.4” already captures most of the value (+20.9).

Third, the optimal rule is more patient than a three-month stop-loss line: in the early months it leaves only when the belief has fallen to about 0.05, and the threshold rises as the end of the test approaches. Early on there is little information and a good market is worth a great deal, so leaving early would kill many good markets too. The optimal rule is worth about +28 to +29 (27.9 from the dynamic programme, 28.9 from simulation; the gap comes from discretising the belief grid and the integral), some 35–40 % more than the three-month rule. “Quit after three months if it isn’t working” is a decent rule of thumb but not the optimum; better to say that the exit threshold should rise as information accumulates, rather than fall like a blade on a fixed date.

Evidence

The usual error in real decisions is not leaving too early but leaving too late. In Staw’s classic experiment, participants who were personally responsible for an earlier investment decision that had turned out badly tended to put more money into it; this is called escalation of commitment (Staw 1976). One function of an exit rule written in advance is to counter this tendency.

A stop-loss is also a signal

So far exit has been the firm’s own affair. Now bring in the partner. The party leaving knows why it is leaving; the partner can only infer from what it sees. This is a signalling game: an action changes outcomes and at the same time carries information about the type of the actor (Spence 1973). In repeated cooperation that information accumulates into reputation: Kreps and Wilson and others showed that even when cooperation lasts only a finite number of rounds, uncertainty about the other’s type is enough to make reputation a strong constraint on behaviour (Kreps and Wilson 1982).

Calculation

After a joint pilot, the foreign firm leaves at month 3. The local partner must decide whether to work with this firm again. To the partner the firm may be a rule-follower (leaves only when the market really is bad, which happens with probability 0.5) or an opportunist (leaves when the market is bad, and in 60 % of good markets as well, taking with it the channels and relationships the partner built; in effect a party with a low discount factor that cares only about now). The partner’s prior is 80 to 20, and he joins the next venture only if he puts the probability of the opportunist type below 0.25.

# A stop-loss exit as a signal. After a joint pilot, the foreign firm exits at month 3. The local
# partner must decide whether to invest again with this firm. Two types of firm, prior 80 / 20:
#   rule-follower - exits only when the market really is bad (it is bad with probability 0.5);
#   opportunist   - exits when the market is bad, and also in 60 % of good markets, walking away
#                   with what the partner built (a low discount factor: it values today over the
#                   relationship).
# The partner joins the next venture only if P(opportunist) < 0.25. A next venture is worth +20 to
# the firm; with an opportunist the partner expects to lose, which is why it screens.
PRIOR_OPP, BAD, GRAB, CUTOFF, NEXT = 0.20, 0.5, 0.6, 0.25, 20.0

def post_opp(l_rule, l_opp):
    return PRIOR_OPP * l_opp / (PRIOR_OPP * l_opp + (1 - PRIOR_OPP) * l_rule)

cases = []
# 1. No stopping rule written on day 1: the partner cannot verify why the firm left.
cases.append(("no written rule, firm exits", BAD, BAD + (1 - BAD) * GRAB))
# 2. A state-contingent rule was written on day 1 (e.g. 'exit if cost per acquired customer stays
#    above X for two consecutive months on the shared dashboard'), and the trigger was hit.
#    Both types exit when the trigger is hit, so the exit itself carries no news about type.
cases.append(("written rule, trigger hit, firm exits", BAD, BAD))
# 3. A rule was written, but the firm exits although the trigger was NOT hit.
cases.append(("written rule, trigger not hit, firm exits", 1e-9, (1 - BAD) * GRAB))
# 4. A rule was written, the trigger was not hit and the firm stays.
cases.append(("written rule, trigger not hit, firm stays", 1 - BAD, (1 - BAD) * (1 - GRAB)))

print("what the partner sees                     | P(opportunist) | joins next venture | firm's value of it")
for label, l_rule, l_opp in cases:
    q = post_opp(l_rule, l_opp)
    join = q < CUTOFF
    print(f"{label:41s} | {PRIOR_OPP:.2f} -> {q:.2f}   | {'yes' if join else 'no':18s} | {NEXT if join else 0:+.0f}")
# Expected reputation value for a rule-follower firm that must exit with probability BAD:
no_rule = BAD * (NEXT if post_opp(BAD, BAD + (1 - BAD) * GRAB) < CUTOFF else 0) + (1 - BAD) * NEXT
rule = BAD * NEXT + (1 - BAD) * NEXT
print(f"honest firm's expected value of the next venture: without a written rule {no_rule:.0f}, with one {rule:.0f}")
print(f"sensitivity: an unexplained exit moves P(opportunist) from 0.20 to {post_opp(BAD, BAD + (1 - BAD) * GRAB):.2f};"
      " it costs the next venture only for partners whose cutoff lies between those two numbers")
# what the partner sees                     | P(opportunist) | joins next venture | firm's value of it
# no written rule, firm exits               | 0.20 -> 0.29   | no                 | +0
# written rule, trigger hit, firm exits     | 0.20 -> 0.20   | yes                | +20
# written rule, trigger not hit, firm exits | 0.20 -> 1.00   | no                 | +0
# written rule, trigger not hit, firm stays | 0.20 -> 0.09   | yes                | +20
# honest firm's expected value of the next venture: without a written rule 10, with one 20
# sensitivity: an unexplained exit moves P(opportunist) from 0.20 to 0.29; it costs the next venture only for partners whose cutoff lies between those two numbers

This program states the core argument of Chapter 2. If no exit rule was written on day one, the exit itself is unfavourable evidence: the partner’s probability that the firm is an opportunist rises from 0.20 to 0.29, crossing his threshold, and the next venture is lost. If on day one an exit trigger was written that both sides can verify, and the trigger was in fact met, the exit carries no unfavourable information at all: both types would leave in this situation, so the partner’s belief stays at the prior of 0.20 and cooperation continues. For a firm that really does follow its rules, writing them down in advance raises the expected value of the next venture from 10 to 20.

The program also shows the other side of the lock: if a rule was written, the trigger was not met and the firm left anyway, the probability of the opportunist type goes straight to 1. Writing the rule down both protects the rule-follower and makes the price of breaking the rule unmistakable. That is why it can build trust.

Note

Three points about this model. First, writing a rule in advance does not make the partner trust you more; it only prevents an exit from damaging trust: when the trigger is met, the partner’s belief stays at the prior. What actually raises trust is keeping faith under the rule (in the program, “rule written, trigger not hit, firm stays” lowers the opportunist probability to 0.09). Second, the conclusion is sensitive to the partner’s threshold: an unexplained exit moves the probability from 0.20 to 0.29, and only partners whose threshold happens to lie between these two numbers refuse to cooperate because of it. Third, the loss an exit imposes on the partner is real: the partner’s specific investments in the venture (hiring, channel negotiations, registering with local regulators) may be worth nothing once you leave. A fair exit rule states not only when you will leave but how the partner’s specific investments will be compensated when you do; Chapters 3 and 8 return to this.

Summary

From the option view, flexibility has value, and more so the greater the volatility. From the stopping view, the best exit rule is a threshold that tightens as information accumulates, not a blade that falls on a fixed date. From the signalling view, the same exit affects the relationship quite differently depending on whether it was agreed in advance or announced afterwards. The next chapter turns to the contract itself: when the environment changes faster than clauses can be written, how should the contract be written?

References

Bellman, Richard. 1957. Dynamic Programming. Princeton University Press.
Cox, John C., Stephen A. Ross, and Mark Rubinstein. 1979. “Option Pricing: A Simplified Approach.” Journal of Financial Economics 7 (3): 229–63.
Dixit, Avinash K., and Robert S. Pindyck. 1994. Investment Under Uncertainty. Princeton University Press.
Kogut, Bruce. 1991. “Joint Ventures and the Option to Expand and Acquire.” Management Science 37 (1): 19–33.
Kreps, David M., and Robert Wilson. 1982. “Reputation and Imperfect Information.” Journal of Economic Theory 27 (2): 253–79.
McDonald, Robert, and Daniel Siegel. 1986. “The Value of Waiting to Invest.” Quarterly Journal of Economics 101 (4): 707–27.
Spence, Michael. 1973. “Job Market Signaling.” Quarterly Journal of Economics 87 (3): 355–74.
Staw, Barry M. 1976. “Knee-Deep in the Big Muddy: A Study of Escalating Commitment to a Chosen Course of Action.” Organizational Behavior and Human Performance 16 (1): 27–44.

Fan, Y. (2026). Cross-Cultural Contracts, Real Options and Game Theory of Southeast Asian Market Entry: Relational Contracting, Optimal Stopping Thresholds and Institutional Distance, Read Beside the Art of War [跨文化契约、实物期权与东南亚出海博弈论] (Version 1.0.0). 5D Library. https://doi.org/10.5281/zenodo.23753261 · Licensed under Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0).