Based on Alexander Elder, Trading for a Living: Psychology, Trading Tactics, Money Management (1993)
Trading for a Living is Alexander Elder's foundational work, published in 1993. Elder — a psychiatrist who emigrated from the Soviet Union in 1974 and discovered trading through the financial markets of New York — brings an unusual dual expertise: clinical understanding of human behavior and years of practical trading experience. This combination gives the book a dimension absent from purely technical works. It is not just a book about what to trade; it is a book about why traders fail and how to restructure oneself to stop failing.
The book's central argument is that trading success depends on mastering three domains simultaneously — what Elder later formalized as the Three M's: Mind (individual psychology and discipline), Method (technical analysis and trading systems), and Money (risk management and capital preservation). Most traders focus exclusively on method — hunting for the perfect indicator or system — while neglecting the psychology and money management that determine whether any system can be traded profitably.
| Domain | Core Question | Consequence of Neglect |
|---|---|---|
| Mind | Can I execute my plan without emotional interference? | Self-sabotage, overtrading, revenge trading, paralysis |
| Method | Do I have a tested edge in reading market behavior? | Random entries, no repeatable process, slow capital drain |
| Money | Can I survive a string of losses and still trade tomorrow? | Catastrophic drawdowns, account destruction, forced exit |
Elder's thesis: the weakest of the three determines the trader's outcome. A brilliant analyst with poor discipline will overtrade and give back profits. A disciplined trader with no analytical method will slowly lose to commissions and slippage. A methodical, disciplined trader with no risk controls will be destroyed by a single catastrophic event.
Unlike Elder's later Come Into My Trading Room (2002), which refines and extends these ideas into a structured course, Trading for a Living is the original exposition. Its unique contributions include:
Elder devotes the first major section of the book to psychology — before any discussion of charts or indicators. This ordering is deliberate. His psychiatric experience convinced him that the primary reason traders fail is not lack of knowledge but lack of self-mastery. The market is a uniquely efficient environment for exposing psychological weakness: every flaw in thinking, every emotional vulnerability, every self-destructive tendency is immediately punished with financial loss.
Many people are drawn to trading for reasons that virtually guarantee failure:
Elder's warning: examine your own motivation honestly. If the primary draw is excitement rather than profit, you are a gambler in disguise. Gambling feels identical to trading except for one detail — the gambler has no edge.
Drawing on his psychiatric training, Elder identifies several patterns of self-destruction that recur among traders:
Elder's prescription:
Elder draws an explicit parallel between trading and addictive behavior:
The test Elder proposes: Can you stop trading for a month without significant psychological distress? If not, the behavior has moved from professional activity to compulsion.
The remedy: Treat it the same way addiction is treated in clinical practice. Acknowledge the problem. Establish strict external controls (money management rules, maximum trade frequency). Seek accountability (a trading partner, a mentor, a trading group that reviews results).
Elder catalogs the specific emotional states that distort decision-making at each stage of a trade:
| Stage | Dangerous Emotion | Behavioral Result |
|---|---|---|
| Before entry | Fear of missing out (FOMO) | Chasing price, entering without a setup |
| At entry | Greed, overconfidence | Position too large, stop too tight or absent |
| While holding a winner | Greed, euphoria | Moving target higher and higher, failing to take partial profits |
| While holding a loser | Hope, denial | Moving stop lower, averaging down, ignoring the evidence |
| At exit | Regret regardless of outcome | After a win: "I should have held longer." After a loss: "I should have cut sooner." Both lead to worse decisions on the next trade. |
The antidote: Pre-commit to the plan. Write down entry, stop, and target before entering. The only decision during the trade is whether conditions have changed enough to invalidate the original analysis — not whether you feel like holding.
Elder argues that understanding crowd psychology is essential because price is determined by crowd behavior, not by individual analysis. Technical analysis works not because chart patterns have mystical predictive power, but because they reflect the emotional footprints of crowds acting under the influence of fear and greed.
A market price at any given moment represents the consensus of all participants. When that consensus shifts — when the crowd's mood changes — price moves. The trader's job is to detect shifts in crowd sentiment before they are fully reflected in price.
A crowd forms when individuals surrender their independence and adopt the group's emotional state. In markets, this happens through:
Elder identifies several properties of crowds that explain market behavior:
Elder's central psychological requirement: the trader must stand apart from the crowd. This does not mean always being contrarian — fighting every trend is as foolish as following every trend. It means maintaining the capacity for independent judgment even when surrounded by emotional consensus.
Practical techniques:
A trend exists when prices move persistently in one direction. Elder defines trends operationally:
Critical principle: Trends exist on every timeframe simultaneously, and they frequently conflict. A stock can be in a daily uptrend within a weekly downtrend. The Triple Screen system resolves these conflicts by assigning different roles to different timeframes.
A trendline connects two or more significant points:
Elder's rules for trendlines:
Gaps are blank spaces on a bar chart where no trading occurred. Elder classifies them:
Trading rule: Trade in the direction of breakaway and continuation gaps. Be cautious after exhaustion gaps. Do not trade common gaps.
Elder covers the classical chart patterns, emphasizing that they work because they reflect crowd psychology:
Reversal patterns (signal a trend change):
Continuation patterns (signal a pause before the trend resumes):
Elder's overarching rule on patterns: Never trade a pattern in isolation. Patterns are most reliable when confirmed by indicators and when they appear in the direction of the higher-timeframe trend (per Triple Screen).
Moving averages smooth price data to reveal the underlying trend. Elder covers three types:
Key EMA applications:
| Period | Timeframe | Role |
|---|---|---|
| 13-day EMA | Daily | Primary trend filter; slope is a key signal |
| 26-day EMA | Daily | Secondary trend filter; the "value zone" between 13 and 26 EMAs |
| 13-week EMA | Weekly | Long-term trend context for Triple Screen |
Trading rules:
The Moving Average Convergence-Divergence is a trend-following momentum indicator. Elder considers the MACD histogram — not the MACD lines themselves — to be the more important component.
Calculation:
MACD Line = EMA(12) - EMA(26) [the "fast" line]
Signal Line = EMA(9) of MACD Line [the "slow" line]
MACD Histogram = MACD Line - Signal Line [the difference between the two]
The MACD Lines — interpretation:
The MACD Histogram — Elder's primary focus:
Critical nuance: The MACD histogram's slope on the weekly chart is the primary filter for Screen 1 of the Triple Screen system. This is the single most important use of any indicator in Elder's framework.
The Directional System, developed by J. Welles Wilder, measures both the direction and the strength of a trend.
Components:
Interpretation:
Elder's use of ADX: Primarily as a filter. Before applying trend-following indicators (MACD, moving averages), check ADX. If ADX is low and flat, switch to oscillators. If ADX is high and rising, use trend-following methods. This is not a standalone trading system but a meta-indicator that tells you which type of tool to use.
Momentum = Today's Close - Close N periods ago Rate of Change = (Today's Close / Close N periods ago) x 100
Both measure the velocity of price change. Elder prefers ROC because it normalizes across different price levels.
Interpretation:
Elder's assessment: Momentum/ROC is useful as confirmation but less reliable as a primary signal generator compared to MACD histogram or Stochastic.
Developed by Larry Williams, %R measures where the current close sits within the recent range.
Calculation:
%R = (Highest High(N) - Close) / (Highest High(N) - Lowest Low(N)) × (-100)
Typical period: 7 or 14 days. The result ranges from 0 to -100.
Interpretation:
Failure swings: When %R reaches overbought territory but fails to reach it on the next rally (in an uptrend), this "failure swing" warns that the trend is weakening.
Developed by George Lane, the Stochastic measures the position of the close relative to the recent range, similar to %R but with smoothing.
Calculation:
%K (fast) = (Close - Lowest Low(N)) / (Highest High(N) - Lowest Low(N)) × 100
%D (slow) = SMA(3) of %K
Slow %K = %D
Slow %D = SMA(3) of Slow %K
Elder recommends the slow Stochastic (Slow %K and Slow %D) to reduce noise.
Interpretation:
Elder's application: The Stochastic is one of the recommended oscillators for Screen 2 of the Triple Screen system. When the weekly trend is up and the daily Stochastic drops into oversold territory, this identifies a pullback buying opportunity within the larger uptrend.
Developed by J. Welles Wilder, RSI measures the ratio of average upward price change to average downward price change.
Calculation:
RS = Average Gain over N periods / Average Loss over N periods
RSI = 100 - (100 / (1 + RS))
Typical period: 14 (Wilder's original) or 7 (for more sensitivity, which Elder sometimes prefers).
Interpretation:
Elder's assessment: RSI is a reliable, well-established oscillator but Elder does not use it as his primary tool for Screen 2. He considers it roughly equivalent to the Stochastic for that purpose, with the Force Index (introduced in Come Into My Trading Room) eventually becoming his preferred Screen 2 tool.
Volume measures the intensity of commitment behind a price move. Elder treats volume as the second most important data after price itself.
Core rules:
Extremely high volume days (2x or more above the recent average) signal climactic events:
In both cases, the climactic volume often marks the terminal point of the trend.
Open interest measures the total number of outstanding contracts in a futures market. Elder's rules:
Combined reading: The strongest bullish setup is rising price + rising volume + rising open interest. The strongest bearish setup is falling price + rising volume + rising open interest.
The Triple Screen system was first published by Elder in Futures magazine in 1985 and fully elaborated in this book. The system's central insight is that every indicator gives useful information only part of the time, and using a single indicator on a single timeframe produces an unacceptable rate of false signals. By requiring agreement across three screens — each analyzing a different dimension — the system dramatically filters out noise.
The three screens are applied sequentially, as gates: if the market fails any screen, the trade is rejected.
Elder insists that the trader begin by choosing a favorite timeframe — the one that matches the trader's personality and schedule. This becomes the intermediate timeframe. The other two are derived using a factor-of-five multiplier:
| Trader Type | Screen 1 (Trend) | Screen 2 (Signal) | Screen 3 (Entry) |
|---|---|---|---|
| Position trader | Monthly | Weekly | Daily |
| Swing trader | Weekly | Daily | Intraday (4h/1h) |
| Day trader | Daily | Hourly (60-min) | 10-15 minute |
The most thoroughly discussed combination in the 1993 book is Weekly / Daily / Intraday for swing traders.
Purpose: Determine the dominant trend on the timeframe one level above the trader's operating timeframe. Screen 1 is a directional filter — it tells you whether to look for longs, shorts, or neither.
Primary indicator: The slope of the weekly MACD histogram.
Rules:
Why MACD histogram slope, not MACD line crossover? The MACD line crossover is a lagging signal — by the time the fast line crosses the slow line, a significant portion of the move has already occurred. The histogram's slope changes direction before the lines cross, providing an earlier indication of shifting momentum.
The most powerful Screen 1 signal: When the weekly MACD histogram makes a divergence (price makes a new extreme but the histogram does not) and then ticks in the expected direction, this represents the strongest possible identification of a trend change.
Purpose: Find a counter-trend move on the daily chart — a wave against the weekly tide — that provides a favorable entry price in the direction of the larger trend.
Core principle: Screen 2 uses oscillators, but it uses them against their usual interpretation. When the weekly trend is up, Screen 2 looks for daily oversold readings (not overbought). When the weekly trend is down, Screen 2 looks for daily overbought readings.
Recommended oscillators for Screen 2 (original 1993 formulation):
Key rule: Screen 2 identifies the zone for entry, not the precise price. The precise entry comes from Screen 3.
Purpose: Pinpoint the exact entry price using a mechanical technique that requires no indicator. Screen 3 uses trailing buy-stops (for longs) and trailing sell-stops (for shorts) to enter only when price confirms the expected direction.
Rules for LONG trades (weekly trend up, daily oscillator oversold):
Rules for SHORT trades (weekly trend down, daily oscillator overbought):
Why this works: The trailing stop ensures that you enter only when price begins moving in the expected direction. If the counter-trend move deepens instead of reversing, the stop trails tighter and tighter until either the trend resumes (triggering entry at a better price) or the weekly signal changes (canceling the setup entirely). This eliminates the problem of catching a falling knife.
Elder's original exit framework is less formalized than his later work but establishes the essential principles:
While the Impulse System is more fully developed in Come Into My Trading Room (2002), its conceptual seeds appear in Trading for a Living. Elder observes that trends alternate between impulse phases (when price and momentum move together) and corrective phases (when they diverge). The idea that a trader should distinguish between these phases — and trade aggressively during impulse, cautiously during correction — is present in the 1993 book even though the formal color-coded system came later.
The Impulse System combines two measurements:
When both agree, an impulse is in force. When they disagree, the market is in a corrective or transitional phase.
| EMA Slope | MACD-H Slope | Impulse State | Action |
|---|---|---|---|
| Rising | Rising | Bullish impulse | Buy or hold longs; do NOT short |
| Falling | Falling | Bearish impulse | Sell short or hold shorts; do NOT buy |
| Mixed | Mixed | No impulse (neutral) | Either direction permitted; exercise caution |
In the 1993 formulation, Elder uses this logic informally:
Elder's blunt statement: the goal of money management is survival. A trader who risks too much on any single trade or allows losses to accumulate unchecked will eventually be destroyed, no matter how good the trading method. Money management is not about maximizing returns; it is about ensuring that no series of losses — however improbable — can end the trader's career.
Rule: Never risk more than 2% of your trading account equity on any single trade.
Calculation:
Maximum Dollar Risk = Account Equity × 0.02
Position Size = Maximum Dollar Risk / (Entry Price - Stop Price)
Example:
Key principles:
Rule: Stop trading for the remainder of the month if total open risk plus closed losses for the month reach 6% of account equity.
Calculation:
Monthly Risk Budget = Account Equity (start of month) × 0.06
Current Usage = Sum of closed losses this month + Sum of open risk on existing positions
If Current Usage >= Monthly Risk Budget → STOP TRADING until next month
Example:
Key principles:
The 2% and 6% rules work as a layered defense:
With a 2% maximum per trade and a 6% monthly limit, the trader can take at most 3 full-risk trades before hitting the monthly cap — assuming all three are losers. This creates natural restraint against overtrading.
Elder argues that most traders repeat the same mistakes because they do not systematically study their own behavior. The trading journal is the tool for turning experience into learning.
For every trade:
| Field | Content |
|---|---|
| Date and instrument | What was traded and when |
| Setup | Which screen/signal triggered the trade (e.g., "Weekly MACD-H rising, daily Stochastic oversold") |
| Entry price and method | Price, whether market/limit/stop, and why |
| Stop-loss | Where and why |
| Target | Where and why |
| Position size | Number of shares/contracts and the 2% calculation |
| Exit price and reason | Was the stop hit? Was the target reached? Did a signal change? |
| P&L | Gross and net (after commissions) |
| Emotional state | How did you feel before, during, and after the trade? |
| Mistakes | Did you deviate from the plan? How? |
| Grade | Rate the quality of the trade (not the outcome). An A-grade trade that lost money is better than a C-grade trade that profited by luck. |
Elder recommends weekly and monthly reviews:
| Mistake | Description | Remedy |
|---|---|---|
| No stop-loss | Entering without a predefined exit point for losses | Never enter without a stop. Calculate it before the trade. |
| Moving stops against yourself | Widening a stop to avoid being taken out | This turns a controlled loss into an uncontrolled one. If the stop is right, let it work. |
| Averaging down | Adding to a losing position hoping it will recover | Adding to losers is a recipe for catastrophe. Add only to winners. |
| Overtrading | Taking too many trades, often out of boredom or FOMO | Restrict yourself to setups that meet all three screens. |
| Undercapitalization | Trading with too little money, forcing oversized risk per trade | Do not trade until you can risk 2% and still have a meaningful position. |
| Trading without a plan | Entering on impulse, news, or tips | Write the plan before market hours. Follow it during market hours. |
| Ignoring the weekly trend | Taking daily signals against the weekly tide | This is the most common technical error. Screen 1 exists to prevent it. |
| System hopping | Abandoning a system after a few losses, searching for a new one | Every system has losing periods. Give your system enough trades to demonstrate its edge. |
Instrument: Stock XYZ, closing at $45.00 on Friday.
Weekly MACD histogram: The histogram has been negative but is now ticking up — the current bar is less negative than the previous bar (-0.15 vs -0.28). The slope has turned upward.
Conclusion: The weekly tide is turning bullish. Screen 1 permits only long trades.
Daily Stochastic (14, 3, 3): Slow %K = 18, Slow %D = 22. The Stochastic is in oversold territory (below 20-30).
Daily chart context: XYZ has pulled back from $47.50 to $44.80 over five days. The 13-day EMA is at $45.20 and still slightly rising. The pullback has brought the Stochastic into oversold territory while the weekly trend is turning up.
Conclusion: Screen 2 is triggered. A pullback within a nascent weekly uptrend has pushed the daily oscillator to oversold. This is a buying opportunity.
Monday: Day's high = $45.10, low = $44.60. Place a buy-stop at $45.15 (one tick above the high).
Tuesday: XYZ trades between $44.40 and $44.90. The buy-stop at $45.15 is not triggered. Lower the buy-stop to $44.95 (one tick above Tuesday's high).
Wednesday: XYZ opens at $44.70, trades up to $45.30. The buy-stop at $44.95 is triggered. We are now long at $44.95.
Stop placement: Below Tuesday's low of $44.40 minus a buffer = $44.30.
Risk per share: $44.95 - $44.30 = $0.65.
Account equity: $50,000.
2% maximum risk: $50,000 × 0.02 = $1,000.
Position size: $1,000 / $0.65 = 1,538 shares. Round down to 1,500 shares.
Actual dollar risk: 1,500 × $0.65 = $975 (1.95% of equity).
Week 1: XYZ rises to $46.50. The daily Stochastic rises to 55 — no longer oversold but not yet overbought. Hold.
Week 2: XYZ reaches $47.80. The daily Stochastic hits 82 — overbought. Move the stop to breakeven ($44.95). Open risk drops to zero, freeing up 6% budget.
Week 3: XYZ pulls back to $47.00, then rallies to $48.50. The weekly MACD histogram is now solidly positive with a rising slope. The daily Stochastic is overbought again at 78 but the weekly trend is strong. Tighten the stop to $47.00 (below the Week 2-3 pullback low).
Week 4: XYZ trades up to $49.20 but the weekly MACD histogram, while still positive, ticks down for the first time (current bar smaller than previous bar). Screen 1 is turning cautious. Exit at the market: $49.00.
Result: Entry $44.95, Exit $49.00. Profit per share = $4.05. Total profit = 1,500 × $4.05 = $6,075 (12.2% return on equity). Risk-reward ratio achieved: 4.05 / 0.65 = 6.2:1.
Date: Week of [trade dates]
Instrument: XYZ Stock
Direction: Long
Setup: Triple Screen — Weekly MACD-H slope up, Daily Stochastic oversold
Entry: $44.95 via trailing buy-stop (Screen 3)
Stop: $44.30 (below Tuesday low minus buffer)
Target: Open (managed by weekly MACD-H slope)
Size: 1,500 shares (1.95% risk)
Exit: $49.00 — weekly MACD-H ticked down
P&L: +$6,075 gross
Grade: A — All three screens confirmed. Entry was patient (waited
for trailing stop trigger). Stop was chart-based. Exit was
rule-based (weekly signal change). No emotional deviations.
Emotion: Felt FOMO on Monday when stop wasn't triggered. Resisted
the urge to enter at market. Felt greedy at $49.20 wanting
to hold for $50. Exited anyway per rules.
============================================================
TRIPLE SCREEN SYSTEM — Original Elder (1993) Formulation
============================================================
PARAMETERS:
-- MACD settings (standard)
macd_fast_period = 12
macd_slow_period = 26
macd_signal_period = 9
-- Oscillator settings for Screen 2
stochastic_k_period = 14
stochastic_d_period = 3
stochastic_slowing = 3
williams_r_period = 14
rsi_period = 14
-- Overbought/oversold thresholds
stoch_oversold = 30
stoch_overbought = 70
williams_oversold = -80
williams_overbought = -20
rsi_oversold = 30
rsi_overbought = 70
-- Entry
entry_buffer_ticks = 1
------------------------------------------------------------
SCREEN 1: Weekly Trend Filter (MACD Histogram Slope)
------------------------------------------------------------
FUNCTION weekly_trend(weekly_bars):
macd_line = EMA(weekly_close, macd_fast_period) -
EMA(weekly_close, macd_slow_period)
signal_line = EMA(macd_line, macd_signal_period)
histogram = macd_line - signal_line
current_bar = histogram[last]
previous_bar = histogram[last - 1]
IF current_bar > previous_bar:
-- Weekly MACD histogram slope is UP
-- Check for bullish divergence (strongest signal)
IF price_made_lower_low(weekly_bars) AND
histogram_made_higher_low(histogram):
RETURN "STRONG_BULLISH"
RETURN "BULLISH"
ELSE IF current_bar < previous_bar:
-- Weekly MACD histogram slope is DOWN
IF price_made_higher_high(weekly_bars) AND
histogram_made_lower_high(histogram):
RETURN "STRONG_BEARISH"
RETURN "BEARISH"
ELSE:
RETURN "NEUTRAL"
------------------------------------------------------------
SCREEN 2: Daily Oscillator (Counter-Trend Signal)
------------------------------------------------------------
FUNCTION daily_signal(daily_bars, weekly_direction, oscillator_choice):
IF oscillator_choice == "STOCHASTIC":
slow_k, slow_d = stochastic(daily_bars,
stoch_k_period,
stoch_d_period,
stochastic_slowing)
oversold = slow_k < stoch_oversold
overbought = slow_k > stoch_overbought
ELSE IF oscillator_choice == "WILLIAMS_R":
wr = williams_r(daily_bars, williams_r_period)
oversold = wr < williams_oversold -- below -80
overbought = wr > williams_overbought -- above -20
ELSE IF oscillator_choice == "RSI":
rsi_val = rsi(daily_bars, rsi_period)
oversold = rsi_val < rsi_oversold
overbought = rsi_val > rsi_overbought
ELSE IF oscillator_choice == "MACD_HISTOGRAM":
hist = macd_histogram(daily_bars)
oversold = hist[last] < 0 AND hist[last] > hist[last - 1]
overbought = hist[last] > 0 AND hist[last] < hist[last - 1]
-- Apply counter-trend logic
IF weekly_direction IN ("BULLISH", "STRONG_BULLISH"):
IF oversold:
RETURN "BUY_SIGNAL"
RETURN "NO_SIGNAL"
ELSE IF weekly_direction IN ("BEARISH", "STRONG_BEARISH"):
IF overbought:
RETURN "SELL_SIGNAL"
RETURN "NO_SIGNAL"
RETURN "NO_SIGNAL"
------------------------------------------------------------
SCREEN 3: Trailing Entry Stop
------------------------------------------------------------
FUNCTION manage_entry_stop(direction, daily_bars, existing_order):
IF direction == "BUY_SIGNAL":
new_stop_price = daily_bars[last].high + entry_buffer_ticks
IF existing_order IS NULL:
-- Place initial buy-stop
RETURN create_buy_stop(new_stop_price)
ELSE IF new_stop_price < existing_order.price:
-- Trail the buy-stop lower (better price)
RETURN modify_order(existing_order, new_stop_price)
ELSE:
-- Keep existing order (don't move stop higher)
RETURN existing_order
ELSE IF direction == "SELL_SIGNAL":
new_stop_price = daily_bars[last].low - entry_buffer_ticks
IF existing_order IS NULL:
RETURN create_sell_stop(new_stop_price)
ELSE IF new_stop_price > existing_order.price:
-- Trail the sell-stop higher (better price)
RETURN modify_order(existing_order, new_stop_price)
ELSE:
RETURN existing_order
------------------------------------------------------------
MAIN LOOP: Nightly Processing
------------------------------------------------------------
FUNCTION run_triple_screen(weekly_bars, daily_bars,
oscillator_choice, account):
-- Step 1: Screen 1
trend = weekly_trend(weekly_bars)
IF trend == "NEUTRAL":
cancel_pending_orders()
RETURN "NO_TRADE — Weekly trend is neutral"
-- Step 2: Screen 2
signal = daily_signal(daily_bars, trend, oscillator_choice)
IF signal == "NO_SIGNAL":
-- If we had a pending entry order, check if weekly still valid
IF pending_order EXISTS AND trend has reversed:
cancel_pending_orders()
RETURN "SETUP CANCELLED — Weekly trend reversed"
RETURN "WAITING — No daily counter-trend signal yet"
-- Step 3: Screen 3
entry_order = manage_entry_stop(signal, daily_bars, pending_order)
-- Step 4: Calculate position size if order exists
IF entry_order IS NOT NULL:
risk_per_share = calculate_stop_distance(signal, daily_bars)
position_size = position_sizer(account, risk_per_share)
entry_order.quantity = position_size
RETURN entry_order
============================================================
RISK MANAGER — Elder 2%/6% System
============================================================
PARAMETERS:
max_risk_per_trade_pct = 0.02 -- 2% rule
max_monthly_risk_pct = 0.06 -- 6% rule
------------------------------------------------------------
2% RULE: Position Sizing
------------------------------------------------------------
FUNCTION position_sizer(account, risk_per_share):
current_equity = account.equity
max_dollar_risk = current_equity * max_risk_per_trade_pct
IF risk_per_share <= 0:
RETURN 0 -- Invalid: stop is at or above entry
max_shares = FLOOR(max_dollar_risk / risk_per_share)
-- Sanity checks
IF max_shares <= 0:
LOG "Trade rejected: stop too far for 2% rule"
RETURN 0
actual_risk = max_shares * risk_per_share
actual_pct = actual_risk / current_equity
LOG "Position: {max_shares} shares, " +
"Risk: ${actual_risk} ({actual_pct:.2%} of equity)"
RETURN max_shares
------------------------------------------------------------
6% RULE: Monthly Drawdown Limit
------------------------------------------------------------
FUNCTION check_monthly_limit(account):
month_start_equity = account.equity_at_month_start
max_monthly_loss = month_start_equity * max_monthly_risk_pct
-- Sum all closed losses this month
closed_losses = 0
FOR EACH trade IN account.trades_this_month:
IF trade.is_closed AND trade.pnl < 0:
closed_losses += ABS(trade.pnl)
-- Sum open risk on all current positions
open_risk = 0
FOR EACH position IN account.open_positions:
per_share_risk = ABS(position.entry_price - position.stop_price)
open_risk += per_share_risk * position.quantity
total_risk_used = closed_losses + open_risk
remaining_budget = max_monthly_loss - total_risk_used
LOG "Monthly risk: ${total_risk_used} of " +
"${max_monthly_loss} used ({total_risk_used/max_monthly_loss:.0%})"
LOG "Remaining budget: ${remaining_budget}"
IF total_risk_used >= max_monthly_loss:
LOG "*** 6% RULE TRIGGERED — NO NEW TRADES THIS MONTH ***"
RETURN {
can_trade: FALSE,
remaining_budget: 0,
reason: "Monthly loss limit reached"
}
RETURN {
can_trade: TRUE,
remaining_budget: remaining_budget,
max_new_trade_risk: MIN(remaining_budget,
account.equity * max_risk_per_trade_pct)
}
------------------------------------------------------------
COMBINED RISK CHECK: Before Each New Trade
------------------------------------------------------------
FUNCTION approve_trade(account, entry_price, stop_price, direction):
-- Step 1: 6% monthly check
monthly = check_monthly_limit(account)
IF NOT monthly.can_trade:
RETURN REJECT("6% monthly limit reached. " +
"Stand aside until next month.")
-- Step 2: 2% per-trade sizing
IF direction == "LONG":
risk_per_share = entry_price - stop_price
ELSE:
risk_per_share = stop_price - entry_price
IF risk_per_share <= 0:
RETURN REJECT("Invalid stop placement.")
max_shares = position_sizer(account, risk_per_share)
IF max_shares == 0:
RETURN REJECT("Stop too wide for 2% rule at current equity.")
-- Step 3: Ensure trade doesn't breach 6% limit
trade_risk = max_shares * risk_per_share
IF trade_risk > monthly.max_new_trade_risk:
adjusted_shares = FLOOR(monthly.max_new_trade_risk / risk_per_share)
IF adjusted_shares == 0:
RETURN REJECT("Insufficient monthly budget for this trade.")
max_shares = adjusted_shares
trade_risk = max_shares * risk_per_share
RETURN APPROVE({
shares: max_shares,
dollar_risk: trade_risk,
risk_pct: trade_risk / account.equity,
entry: entry_price,
stop: stop_price,
monthly_budget_after: monthly.remaining_budget - trade_risk
})
============================================================
INDICATOR SUITE — Elder's 1993 Toolkit
============================================================
------------------------------------------------------------
Exponential Moving Average
------------------------------------------------------------
FUNCTION ema(data, period):
multiplier = 2.0 / (period + 1)
result = [SMA(data[0:period])] -- seed with SMA
FOR i = period TO LENGTH(data) - 1:
val = (data[i] - result[last]) * multiplier + result[last]
result.APPEND(val)
RETURN result
------------------------------------------------------------
MACD, Signal, Histogram
------------------------------------------------------------
FUNCTION macd_system(close_data):
fast_ema = ema(close_data, 12)
slow_ema = ema(close_data, 26)
macd_line = fast_ema - slow_ema -- element-wise
signal = ema(macd_line, 9)
histogram = macd_line - signal -- element-wise
RETURN { macd: macd_line, signal: signal, histogram: histogram }
------------------------------------------------------------
Stochastic Oscillator (Slow)
------------------------------------------------------------
FUNCTION stochastic_slow(high, low, close, k_period, d_period, slowing):
-- Raw %K
raw_k = []
FOR i = k_period - 1 TO LENGTH(close) - 1:
hh = MAX(high[i - k_period + 1 : i + 1])
ll = MIN(low[i - k_period + 1 : i + 1])
IF hh == ll:
raw_k.APPEND(50)
ELSE:
raw_k.APPEND((close[i] - ll) / (hh - ll) * 100)
-- Slow %K = SMA of raw %K
slow_k = SMA(raw_k, slowing)
-- Slow %D = SMA of Slow %K
slow_d = SMA(slow_k, d_period)
RETURN { slow_k: slow_k, slow_d: slow_d }
------------------------------------------------------------
Williams %R
------------------------------------------------------------
FUNCTION williams_r(high, low, close, period):
result = []
FOR i = period - 1 TO LENGTH(close) - 1:
hh = MAX(high[i - period + 1 : i + 1])
ll = MIN(low[i - period + 1 : i + 1])
IF hh == ll:
result.APPEND(-50)
ELSE:
result.APPEND((hh - close[i]) / (hh - ll) * (-100))
RETURN result
------------------------------------------------------------
Relative Strength Index
------------------------------------------------------------
FUNCTION rsi(close_data, period):
gains = []
losses = []
FOR i = 1 TO LENGTH(close_data) - 1:
change = close_data[i] - close_data[i - 1]
IF change > 0:
gains.APPEND(change)
losses.APPEND(0)
ELSE:
gains.APPEND(0)
losses.APPEND(ABS(change))
-- First average: simple mean
avg_gain = MEAN(gains[0:period])
avg_loss = MEAN(losses[0:period])
result = []
IF avg_loss == 0:
result.APPEND(100)
ELSE:
rs = avg_gain / avg_loss
result.APPEND(100 - (100 / (1 + rs)))
-- Subsequent: smoothed (Wilder's method)
FOR i = period TO LENGTH(gains) - 1:
avg_gain = (avg_gain * (period - 1) + gains[i]) / period
avg_loss = (avg_loss * (period - 1) + losses[i]) / period
IF avg_loss == 0:
result.APPEND(100)
ELSE:
rs = avg_gain / avg_loss
result.APPEND(100 - (100 / (1 + rs)))
RETURN result
------------------------------------------------------------
Rate of Change (ROC)
------------------------------------------------------------
FUNCTION roc(close_data, period):
result = []
FOR i = period TO LENGTH(close_data) - 1:
result.APPEND((close_data[i] / close_data[i - period] - 1) * 100)
RETURN result
------------------------------------------------------------
Directional System (ADX, +DI, -DI) — Simplified
------------------------------------------------------------
FUNCTION directional_system(high, low, close, period):
-- True Range
tr = []
plus_dm = []
minus_dm = []
FOR i = 1 TO LENGTH(close) - 1:
h_l = high[i] - low[i]
h_pc = ABS(high[i] - close[i-1])
l_pc = ABS(low[i] - close[i-1])
tr.APPEND(MAX(h_l, h_pc, l_pc))
up_move = high[i] - high[i-1]
down_move = low[i-1] - low[i]
IF up_move > down_move AND up_move > 0:
plus_dm.APPEND(up_move)
ELSE:
plus_dm.APPEND(0)
IF down_move > up_move AND down_move > 0:
minus_dm.APPEND(down_move)
ELSE:
minus_dm.APPEND(0)
-- Smooth using Wilder's method (period-day smoothing)
smoothed_tr = wilder_smooth(tr, period)
smoothed_plus_dm = wilder_smooth(plus_dm, period)
smoothed_minus_dm = wilder_smooth(minus_dm, period)
-- +DI and -DI
plus_di = (smoothed_plus_dm / smoothed_tr) * 100
minus_di = (smoothed_minus_dm / smoothed_tr) * 100
-- DX and ADX
dx = ABS(plus_di - minus_di) / (plus_di + minus_di) * 100
adx = wilder_smooth(dx, period)
RETURN { plus_di: plus_di, minus_di: minus_di, adx: adx }
------------------------------------------------------------
Impulse System (Proto-Version from 1993 Concepts)
------------------------------------------------------------
FUNCTION impulse_check(close_data):
ema_13 = ema(close_data, 13)
macd_data = macd_system(close_data)
hist = macd_data.histogram
ema_rising = ema_13[last] > ema_13[last - 1]
ema_falling = ema_13[last] < ema_13[last - 1]
hist_rising = hist[last] > hist[last - 1]
hist_falling = hist[last] < hist[last - 1]
IF ema_rising AND hist_rising:
RETURN "BULLISH_IMPULSE" -- Do not short
ELSE IF ema_falling AND hist_falling:
RETURN "BEARISH_IMPULSE" -- Do not buy
ELSE:
RETURN "NEUTRAL" -- Either direction OK, with caution
"The goal of a successful trader is to make the best trades. Money is secondary."
This encapsulates Elder's process-over-outcome philosophy. Focus on the quality of decisions, and the money follows.
"The markets are set up so that most traders must lose money. The markets are a minus-sum game because of commissions and slippage."
A sobering reminder that trading is not a zero-sum game — it is a negative-sum game. The winners must overcome not only the losers' contributions but also the rake taken by the house.
"When you trade, you are competing against the sharpest minds in the world. The playing field is tilted against you by commissions and slippage. If good enough and work hard enough, you can overcome this handicap."
The standard is not "beating the average" but beating the very best participants, net of costs.
"An amateur looks at the screen and sees millions of dollars flickering. A professional sees a field of probabilities."
The shift from emotional perception (money) to analytical perception (probability) is the psychological transformation that separates winners from losers.
"Successful trading is based on the 3 M's — Mind, Method, and Money. Beginners focus on analysis, but professionals operate in a three-dimensional space."
The three-dimensional framework: most educational material addresses only method, leaving traders equipped with tools but lacking the psychological and financial architecture to use them.
"The amateur who is losing money keeps looking for advice. He asks his broker, reads newsletters, pays for hotlines. He gives one guru after another the power over his money."
Elder's critique of the guru-following mentality: outsourcing trading decisions means outsourcing accountability.
"A losing trader can do little to transform himself into a winning trader. A losing trader is not going to want to change. That is the kind of person he is."
The harshest statement in the book. Elder believes that the psychological patterns causing trading failure are deeply ingrained character traits that most people will not change. The few who do change are those willing to undertake genuine self-examination.
"You can be free. You can live and work anywhere in the world. You can be independent from routine and not answer to anybody. This is the life of a successful trader."
The aspirational vision that draws people to trading — but Elder spends the rest of the book explaining the immense difficulty of reaching this destination.
"The market does not know you exist. You cannot do anything to influence it. You can only control your behavior."
The foundation of Elder's psychological discipline: the only variable under the trader's control is the trader's own actions.
"Risk management is the cornerstone of survival. You can have the best system in the world, but if your risk management is poor, you will lose."
The explicit ranking: money management is not secondary to method — it is primary. A mediocre system with excellent risk management will outperform an excellent system with poor risk management.
This summary covers the original 1993 formulation of Elder's trading framework. For the refined and extended treatment — including the formal Impulse System, Force Index, Elder-ray, the Trader's Spreadsheet grading system, and updated Triple Screen indicator recommendations — see the companion summary of Come Into My Trading Room (2002).