威廉·歐尼爾

By | 2026-03-17

威廉·歐尼爾(William J. O’Neil,1933年3月25日-2023年5月28日)是美國著名的投資大師、證券經紀人與財經作家,被譽為「成長股投資的一代宗師」。他最廣為人知的成就是開發了「CAN SLIM」選股系統,並創辦了全球知名的財經報紙《投資者商報》(Investor’s Business Daily, IBD)。歐尼爾是首位將大數據與電腦分析引入股票研究的先驅,其投資哲學結合了基本面分析與技術面動能,對後世動能投資與趨勢交易者產生了深遠影響。

背景與早年經歷

威廉·歐尼爾出生於美國奧克拉荷馬城,在德州長大。他畢業於南方衛理公會大學(Southern Methodist University),取得商學學士學位,並曾於美國空軍服役。

1958 年,歐尼爾進入海登史東公司(Hayden, Stone & Company)擔任證券經紀人,正式開啟了他的金融職涯。在職業生涯初期,他展現出對數據研究的強烈興趣,他開始觀察那些表現最優異的「飆股」在起漲前具備哪些共同特徵。這段時期的研究奠定了他後來「CAN SLIM」法則的基礎。

職涯發展

1962 年至 1963 年間,歐尼爾憑藉著對克萊斯勒(Chrysler)和辛泰克斯(Syntex)等股票的出色操作,在短短 18 個月內將 5,000 美元的原始資金翻倍成長至 200,000 美元。憑藉這筆資本,他在 1963 年創立了威廉·歐尼爾公司(William O’Neil & Co. Inc.),年僅 30 歲便成為當時紐約證券交易所(NYSE)最年輕的席位擁有者。

歐尼爾也是金融科技的先驅,他在 1960 年代初期就投入大量資金建立電腦化的股票資料庫,為專業機構投資者提供詳細的圖表與數據分析服務。1984 年,他為了與《華爾街日報》競爭,創辦了《投資者商報》(Investor’s Daily,後更名為 Investor’s Business Daily),旨在將專業級的數據與「CAN SLIM」研究方法普及給一般散戶投資者。

投資風格概述

歐尼爾的投資風格被歸類為「成長股動能投資」。他並不認同傳統價值投資中「買低賣高」或「尋找低本益比股票」的作法。相反地,他主張「買高賣更高」,尋找那些具備強勁盈餘成長、創新產品或服務,且股價已經突破底部盤整區間的領導股。

其核心理念「CAN SLIM」分別代表了七大選股準則:

  • C (Current Earnings):當季每股盈餘大幅成長。
  • A (Annual Earnings):年度盈餘穩定增長。
  • N (New Product/Management/Highs):新產品、新管理層或股價創下新高。
  • S (Supply and Demand):股票的供給與需求。
  • L (Leader or Laggard):選擇產業領導股而非落後股。
  • I (Institutional Sponsorship):有機構法人支持。
  • M (Market Direction):判斷市場大盤趨勢。

最為人稱道的事蹟

歐尼爾最著名的著作《笑傲股市》(How to Make Money in Stocks)自 1988 年出版以來,在全球銷售超過 200 萬冊,被視為投資界的經典教科書。書中詳細介紹了「杯狀帶柄」(Cup and Handle)形態,這是一種他在研究了數十年飆股走勢後總結出的經典技術分析圖型,至今仍被無數技術分析者沿用。

此外,他對風險管理的堅持也極具代表性。他嚴格執行「7%至8%自動停損」規則,強調投資者應在損失擴大之前果斷認賠,以保護本金並等待下一次重擊的機會。

影響力與地位

威廉·歐尼爾在華爾街被視為將「量化研究」與「技術圖表」結合的奠基者。他打破了散戶與機構投資者之間的資訊不對稱,透過《投資者商報》提供的 RS 評等(相對強度評等)等工具,讓個人投資者也能運用專業級的選股邏輯。

他的弟子與受其影響的投資人無數,其中包括多次奪得美國投資大賽冠軍的大衛·瑞安(David Ryan)以及知名投資家馬克·米奈爾維尼(Mark Minervini)。歐尼爾於 2023 年以 90 歲高齡辭世,但他留下的 CAN SLIM 系統與對成長股的研究方法,依然是現代趨勢跟隨與動能交易的核心支柱。

我把CANSLIM的作法請Gemine寫成一個選股策略,它給的腳本如下

// 策略名稱:William O'Neil CAN SLIM 成長動能選股
// 策略類型:成長股/動能突破/基本面與技術面混合

SetTotalBar(260); // 確保有足夠的 K 棒計算 200 日均線、52 週高點與年度財報

var:
idxClose(0), idxMa50(0), isMarketBullish(false),
epsCurrQ(0), epsPastQ(0), epsYoY(0),
salesCurrQ(0), salesPastQ(0), salesYoY(0),
epsCurrY(0), epsPast3Y(0), epsCagr3Y(0),
roe(0),
high252(0), isNearNewHigh(false),
avgVol50(0), isVolumeSurge(false),
ma10(0), ma50(0), ma200(0), isLeader(false),
instHoldCurr(0), instHoldPast(0), isInstBuying(false);

// ==========================================
// M: 市場方向 (Market Direction)
// ==========================================
// 歐尼爾鐵律:只在確認的上升趨勢中買進股票。以大盤站上 50MA 為基礎濾網。
idxClose = GetSymbolField("TSE.TW", "收盤價", "D");
idxMa50 = Average(idxClose, 50);

if idxClose > idxMa50 then
isMarketBullish = true
else
isMarketBullish = false;

condition1 = isMarketBullish = true;

// ==========================================
// C: 當季盈餘與營收 (Current Earnings)
// ==========================================
// 當季 EPS YoY >= 20%,且營收 YoY >= 25% (確保獲利來自本業高速擴張)
epsCurrQ = GetField("每股稅後淨利(元)", "Q");
epsPastQ = GetField("每股稅後淨利(元)", "Q")[4];

if epsPastQ > 0 then
epsYoY = (epsCurrQ - epsPastQ) / epsPastQ * 100
else
epsYoY = 0;

salesCurrQ = GetField("營業收入淨額", "Q");
salesPastQ = GetField("營業收入淨額", "Q")[4];

if salesPastQ > 0 then
salesYoY = (salesCurrQ - salesPastQ) / salesPastQ * 100
else
salesYoY = 0;

condition2 = epsYoY >= 20.0 and salesYoY >= 25.0;

// ==========================================
// A: 年度盈餘 (Annual Earnings)
// ==========================================
// 過去 3 年 EPS CAGR >= 25% (此處以簡單年化代替),且 ROE >= 17%
epsCurrY = GetField("每股稅後淨利(元)", "Y");
epsPast3Y = GetField("每股稅後淨利(元)", "Y")[3];

if epsPast3Y > 0 then
epsCagr3Y = ((epsCurrY - epsPast3Y) / epsPast3Y) * 100 / 3
else
epsCagr3Y = 0;

roe = GetField("股東權益報酬率", "Y");

condition3 = epsCagr3Y >= 25.0 and roe >= 17.0;

// ==========================================
// N: 新高價 (New Highs)
// ==========================================
// 股價位於 52 週新高的 15% 範圍內 (蓄勢待發的樞紐點附近)
high252 = Highest(High[1], 252);

if Close >= (high252 * 0.85) then
isNearNewHigh = true
else
isNearNewHigh = false;

condition4 = isNearNewHigh = true;

// ==========================================
// S: 供給與需求 (Supply and Demand)
// ==========================================
// 突破時成交量需高於 50 日均量的 40% (即 1.4 倍),並加上基本流動性過濾
avgVol50 = Average(Volume[1], 50);

if Volume > (avgVol50 * 1.4) then
isVolumeSurge = true
else
isVolumeSurge = false;

condition5 = isVolumeSurge = true and avgVol50 > 1000;

// ==========================================
// L: 領導股 (Leader)
// ==========================================
// 股價必須站上 10日、50日及 200日均線,呈現完美的強勢多頭排列
ma10 = Average(Close, 10);
ma50 = Average(Close, 50);
ma200 = Average(Close, 200);

if Close > ma10 and Close > ma50 and Close > ma200 then
isLeader = true
else
isLeader = false;

condition6 = isLeader = true;

// ==========================================
// I: 機構認同度 (Institutional Sponsorship)
// ==========================================
// 投信近 20 日持股比例呈現上升趨勢,確認有 Smart Money 正在進場護航
instHoldCurr = GetField("投信持股比例", "D");
instHoldPast = GetField("投信持股比例", "D")[20];

if instHoldCurr > instHoldPast then
isInstBuying = true
else
isInstBuying = false;

condition7 = isInstBuying = true;

// ==========================================
// 綜合篩選與輸出
// ==========================================
if condition1 and condition2 and condition3 and condition4 and condition5 and condition6 and condition7 then
begin
ret = 1;
// 輸出欄位供選股後檢視與排序
outputfield1(epsYoY, "單季EPS YoY(%)");
outputfield2(salesYoY, "單季營收 YoY(%)");
outputfield3(roe, "ROE(%)");
end;

我拿這個腳本去回測,發現績效蠻好的,勝率也蠻高的

缺點是訊號少,如果踩到雷,不停損 ,虧起來還蠻慘的

加了8%停損後,績效依然不錯,但MDD就回到20%以內了

列出去年這個策略符合條件的交易標的如下