海龟交易策略 (1980s)

1983年,商品交易员理查德·丹尼斯培训了一群普通人——海龟——让他们学习一个基于价格和纪律的简单趋势跟踪系统。

海龟交易策略 (1980s)
一键发币: Aptos | X Layer | SUI | SOL | BNB | ETH | BASE | ARB | OP | Polygon | Avalanche | 用AI学区块链开发

每个十年都会带来新的交易潮流。

量化基金、神经网络、GPT驱动的算法——都在追逐那个难以捉摸的“优势”。

但没有人谈论的转折点是:

👉 一个来自80年代的策略仍然击败了大多数现代人工智能系统。

简单。优雅。经过时间考验。并且非常有效。

让我们揭开这个交易公式,它让理查德·丹尼斯(Richard Dennis)、埃德·塞科塔(Ed Seykota)和最初的“海龟交易者”建立了世代财富——以及**你如何使用现代数据工具如 EODHD API 进行回测。

1、起源:海龟交易实验

1983年,商品交易员理查德·丹尼斯与他的合伙人威廉·埃克哈特打赌:

“交易可以被教授吗,还是伟大的交易员是天生的?”

为了证明自己的观点,丹尼斯培训了一群普通人——海龟——让他们学习一个基于价格和纪律的简单趋势跟踪系统

没有AI。没有GPU。

只有原始规则——以及情绪控制。

结果?

这群人四年内总共赚了超过1.75亿美元

同样的机械系统——80年代的趋势跟踪公式——继续击败许多依赖复杂建模但无法在市场变化时适应的机器学习基金。

2、核心公式:简单胜于复杂

海龟交易系统围绕一个永恒的原则:

“交易突破。快速止损。让赢家继续。”

以下是分解:

就是这样。没有指标。没有振荡器。只是规则——经过数十年的波动、危机和泡沫验证。

3、为什么这依然有效(甚至对现代AI也是如此)

人工智能模型在模式识别方面非常出色——但市场是非平稳的。

它们不断改变特征、波动性和相关结构。

海龟公式之所以能成功,是因为它无需重新训练就能适应。

  • 波动率调整的仓位大小 —— 自然地随着风险变化
  • 突破逻辑 —— 捕捉长期结构性变化
  • ATR止损逻辑 —— 避免随机短期噪音
  • 系统化执行 —— 消除情绪偏见

现代ML模型往往过度拟合过去。80年代的公式不会预测——它会智能反应

4、完整Python代码:海龟交易策略

# ==============================================================  
#  🐢 80年代海龟交易公式 — EODHD API版  
#  作者:Nayab Bhutta  
#  目的:重现经典的海龟系统并与买入并持有进行比较  
# ==============================================================
import requests  
import pandas as pd  
import numpy as np  
import matplotlib.pyplot as plt# --- API配置 ---  
API_KEY = "YOUR_EODHD_API_KEY"  # 🔑 替换为你的EODHD密钥  
symbol = "SPY.US"# --- 从EODHD API获取数据 ---  
url = f"https://eodhd.com/api/eod/{symbol}?api_token={API_KEY}&fmt=json"  
response = requests.get(url)  
df = pd.DataFrame(response.json())# --- 清洗和准备数据 ---  
df['date'] = pd.to_datetime(df['date'])  
df.set_index('date', inplace=True)  
df = df.sort_index()  
df = df[['close', 'high', 'low']].astype(float)# --- 海龟系统参数 ---  
entry_window = 20  
exit_window = 10  
atr_period = 14# --- 计算信号 ---  
df['20d_high'] = df['high'].rolling(entry_window).max()  
df['20d_low'] = df['low'].rolling(entry_window).min()  
df['10d_high'] = df['high'].rolling(exit_window).max()  
df['10d_low'] = df['low'].rolling(exit_window).min()# ATR用于波动率调整的仓位大小  
df['TR'] = np.maximum(df['high'] - df['low'],  
                      np.maximum(abs(df['high'] - df['close'].shift()),  
                                 abs(df['low'] - df['close'].shift())))  
df['ATR'] = df['TR'].rolling(atr_period).mean()# --- 进入和退出规则 ---  
df['signal'] = 0  
df.loc[df['close'] > df['20d_high'].shift(1), 'signal'] = 1   # 多头进入  
df.loc[df['close'] < df['20d_low'].shift(1), 'signal'] = -1  # 空头进入# 如果相反的突破则退出  
df['exit'] = 0  
df.loc[df['close'] < df['10d_low'].shift(1), 'exit'] = 1  
df.loc[df['close'] > df['10d_high'].shift(1), 'exit'] = 1# --- 策略逻辑 ---  
df['position'] = np.nan  
position = 0for i in range(1, len(df)):  
    if df['signal'].iloc[i] == 1:  
        position = 1  
    elif df['signal'].iloc[i] == -1:  
        position = -1  
    elif df['exit'].iloc[i] == 1:  
        position = 0  
    df['position'].iloc[i] = positiondf['position'] = df['position'].ffill().fillna(0)# --- 收益计算 ---  
df['returns'] = df['close'].pct_change()  
df['strategy'] = df['position'].shift(1) * df['returns']# --- 账户曲线 ---  
df['equity_curve_strategy'] = (1 + df['strategy']).cumprod()  
df['equity_curve_bh'] = (1 + df['returns']).cumprod()# --- 绩效指标 ---  
def CAGR(series):  
    years = (series.index[-1] - series.index[0]).days / 365  
    return (series.iloc[-1] / series.iloc[0]) ** (1 / years) - 1def sharpe(series):  
    return np.sqrt(252) * (series.mean() / series.std())def max_drawdown(equity):  
    roll_max = equity.cummax()  
    drawdown = equity / roll_max - 1  
    return drawdown.min()cagr_strategy = CAGR(df['equity_curve_strategy'])  
cagr_bh = CAGR(df['equity_curve_bh'])  
sharpe_strategy = sharpe(df['strategy'])  
mdd_strategy = max_drawdown(df['equity_curve_strategy'])print("===== 📊 绩效指标 =====")  
print(f"CAGR (海龟策略): {cagr_strategy*100:.2f}%")  
print(f"CAGR (买入并持有): {cagr_bh*100:.2f}%")  
print(f"夏普比率: {sharpe_strategy:.2f}")  
print(f"最大回撤: {mdd_strategy*100:.2f}%")# --- 绘制账户曲线 ---  
plt.figure(figsize=(12,6))  
plt.plot(df.index, df['equity_curve_strategy'], label='🐢 海龟策略 (80年代公式)', color='dodgerblue', linewidth=2)  
plt.plot(df.index, df['equity_curve_bh'], label='💼 买入并持有 (SPY)', color='gray', linestyle='--')  
plt.title('海龟交易策略 vs 买入并持有 (SPY)')  
plt.xlabel('日期')  
plt.ylabel('账户曲线 (标准化)')  
plt.legend()  
plt.grid(alpha=0.3)  
plt.show()

5、输出示例(SPY 2010–2025)

图表将显示两条账户曲线:

  • 蓝色线: 海龟系统的绩效(80年代公式)
  • 灰色虚线: SPY 买入并持有基准

海龟策略较小的回撤和较高的夏普比率展示了其持久的力量——即使在现代市场中也是如此。

专业提示:尝试将 "SPY.US" 替换为 "GOLD.CMD""AAPL.US""BTC-USD.CC",看看相同的规则如何在不同资产上适应。

真正强大的力量在于你将旧智慧与新工具结合

  • 使用 EODHD API 来获取干净、全球的市场数据。
  • Python + VectorBT 或 Zipline 中系统地回测。
  • 添加现代见解——波动率过滤器、趋势强度阈值,甚至情感叠加。

但基础仍然不变: 价格。波动性。纪律。

6、最后思考:80年代从未消亡

海龟公式今天仍然让人工智能感到羞愧的原因很简单——它利用了没有改变的人类行为。

贪婪、恐惧和惯性仍然推动着市场。

只要这些情绪存在,趋势跟踪就会有效。 你不需要20个GPU或由ChatGPT训练的算法——只需要干净的数据、严格的规则和时间

所以下次有人试图向你出售每月1000美元的“AI预测器”时,请记住: 几行Python代码——和一个EODHD API 密钥——是你真正需要的全部。


原文链接:The 1980s Trading Formula That STILL Humiliates Modern AI!

DefiPlot翻译整理,转载请标明出处

免责声明:本站资源仅用于学习目的,也不应被视为投资建议,读者在采取任何行动之前应自行研究并对自己的决定承担全部责任。