第 04 課:技術指標の真の役割
重要な洞察: 指標は「買い/売りシグナル」ではない - それらは特徴量エンジニアリングである。
「ゴールデンクロスは上昇を意味する」という幻想
ある初心者トレーダーがオンラインで「確実勝利」ルールを学んだ:MACDゴールデンクロスで買い、デッドクロスで売る。
彼は興奮してプログラムを書き、10年分のデータをバックテストした。結果:勝率52%、年率リターン-8%。
「どうしてこんなことに?ゴールデンクロスは明らかに強気シグナルだ!」
彼はRSI売られすぎ買い、Bollinger Band下限買い、移動平均強気配列買いを試した... すべての「古典的シグナル」を単独で使用すると、勝率は50%付近を推移し、手数料後すべて損失を出した。
何が間違っていたのか?
この初心者はよくある間違いを犯した:テクニカル指標を買い/売りシグナルとして扱った。
真実は:
- 指標は遅行性がある: MACDゴールデンクロスの時には、価格はすでに上昇している
- 指標は単純化されている: 単一の数字では複雑な市場状態を捉えられない
- 指標は利用されている: 全員が同じシグナルを見ると、シグナルは効果を失う
では、テクニカル指標は実際に何に役立つのか?
答え:特徴量エンジニアリング。指標は直接取引のためではなく、市場状態を記述するためのもの。MACD、RSI、Bollinger Bandsなど数十の指標を機械学習モデルの入力特徴量として組み合わせると、真の価値を発揮できる。
このレッスンの目標:テクニカル指標の本質を理解し、正しく使用する方法を学ぶ支援をする。
4.1 指標の本質
指標 = 数学的変換
すべてのテクニカル指標は本質的に価格と出来高の数学的変換:
| 生データ | 変換方法 | 結果指標 |
|---|---|---|
| 終値系列 | 移動平均 | MA(移動平均) |
| 終値系列 | 指数加重平均 | EMA(指数移動平均) |
| 価格変動系列 | 相対強度計算 | RSI |
| 価格系列 | 平均 +/- 標準偏差 | Bollinger Bands |
| 高値、安値、終値 | 複数計算 | MACD |
重要な洞察: 指標は新しい情報を作らない。既存の情報を異なる方法で提示するだけ。
遅行性は固有の特性
過去のデータから計算される指標は本質的に遅行性がある:
価格がすでに変化
|
指標を計算
|
指標がシグナル生成
|
あなたが行動
|
価格はすでに反転している可能性
| 指標 | 典型的パラメータ | 遅行量 |
|---|---|---|
| MA5 | 5日平均 | 約2-3日 |
| MA20 | 20日平均 | 約10日 |
| MACD | 12, 26, 9 | 約5-10日 |
| RSI(14) | 14日 | 約7日 |
要点: 指標が未来を「予測」することを期待しない。「今」と「過去」を記述できるだけ。
情報圧縮と損失
数百日の価格データを単一の数字(RSI=65など)に圧縮すると、必然的に重要な情報が失われる:
- 価格の分布形状は? 失われる
- 出来高変化パターンは? 失われる
- 日中ボラティリティ特性は? 失われる
これが単一指標では効果的に取引を導けない理由 - 情報が少なすぎる。
4.2 トレンド指標
MA / EMA: 平滑化 vs 遅行性のトレードオフ
移動平均(MA): 過去N日の終値の単純平均。
MA(5) = (P1 + P2 + P3 + P4 + P5) / 5
指数移動平均(EMA): 最近の価格により高い重みを与える。
EMA = 今日の価格 x alpha + 昨日のEMA x (1-alpha)
ここで alpha = 2 / (N+1)
| 比較 | MA(単純移動平均) | EMA(指数移動平均) |
|---|---|---|
| 重み分布 | 等しい | 最近のデータがより高い |
| 新しいデータへの反応 | 遅い | 速い |
| 平滑性 | より滑らか | より敏感 |
| 使用ケース | 長期トレンド | 短期トレンド |
基本的なトレードオフ: パラメータが小さい -> より敏感 -> よりノイズが多い。パラメータが大きい -> より安定 -> より遅行性。
MACD: トレンドとモメンタム
MACDは最もよく使われるトレンド指標の一つで、3つの部分から構成:
DIFF(速線) = EMA12 - EMA26
DEA(シグナル線) = EMA9(DIFF)
ヒストグラム = 2 x (DIFF - DEA)
プラットフォーム注: 一部の取引プラットフォーム(特にアジア市場のTradingView中国版、同花順など)はヒストグラムを2倍するが、西洋プラットフォームは通常しない。MACD値を参照する際は、使用するプラットフォームの式を常に確認すること。
直感的理解:
- DIFF: 短期と長期トレンドの差
- DEA: DIFFの平滑化版
- ヒストグラム: トレンド加速/減速の度合い
| MACD状態 | 意味 | 市場解釈 |
|---|---|---|
| DIFF > 0、ヒストグラム拡大 | 上昇トレンド加速 | 強気強い |
| DIFF > 0、ヒストグラム縮小 | 上昇トレンド減速 | 天井の可能性 |
| DIFF < 0、ヒストグラム縮小 | 下降トレンド減速 | 底の可能性 |
| DIFF < 0、ヒストグラム拡大 | 下降トレンド加速 | 弱気強い |
ダイバージェンス分析
ダイバージェンスはテクニカル分析で最も重要な概念の一つ:
| ダイバージェンスタイプ | 価格の動き | MACDの動き | 意味 |
|---|---|---|---|
| 弱気ダイバージェンス | 新高値 | 新高値なし | 上昇モメンタム枯渇、下落可能性 |
| 強気ダイバージェンス | 新安値 | 新安値なし | 下降モメンタム枯渇、上昇可能性 |
弱気ダイバージェンス例:
価格: 100 -> 110 -> 120 -> 125 -> 130(新高値)
MACD: 10 -> 15 -> 18 -> 16 -> 14(新高値なし)
^
モメンタム枯渇シグナル
重要な警告:
- ダイバージェンスは「可能性」シグナルのみ、「確実」シグナルではない
- ダイバージェンスのみで取引すると通常勝率55-60%のみ
- 他の指標と市場構造からの確認が必要
4.3 オシレーター指標
RSI: 相対強度
RSIは最近の上昇と下落の相対強度を測定:
RS = 平均上昇 / 平均下落
RSI = 100 - 100/(1+RS)
RSIは0-100の範囲:
| RSI範囲 | 伝統的解釈 | 現実 |
|---|---|---|
| > 70 | 買われすぎ、売るべき | 強い市場は > 80に留まることができる |
| 30-70 | 通常範囲 | ほとんどの時間ここ |
| < 30 | 売られすぎ、買うべき | 弱い市場は < 20に留まることができる |
RSIの実際の使用法:
- 70/30のみを買い/売りシグナルとして依存しない
- RSIのトレンドがより重要:RSIが30から上昇 vs RSIが60-70で振動
- RSIダイバージェンスも同様に有効:価格が新高値を作るがRSIは作らない = 弱気ダイバージェンス
Bollinger Bands
Bollinger Bandsは3本の線から構成:
中央バンド = MA20(20日移動平均)
上限バンド = MA20 + 2 sigma(平均 + 2標準偏差)
下限バンド = MA20 - 2 sigma(平均 - 2標準偏差)
統計的意味: 正規分布仮定下で、価格が上限と下限バンド間にある確率は95%。
| Bollingerシグナル | 伝統的解釈 | 適用シナリオ |
|---|---|---|
| 上限バンドタッチ | 買われすぎ、反落可能性 | 横ばい市場 |
| 下限バンドタッチ | 売られすぎ、反発可能性 | 横ばい市場 |
| 上限バンド突破 | トレンド開始 | トレンド市場 |
| バンド縮小 | ボラティリティ減少、ブレイクアウト来る | すべての市場 |
重要な洞察: Bollinger Bandsは横ばい市場での「反転」シグナル、トレンド市場での「ブレイクアウト」シグナル - まず市場状態を識別する必要がある。
4.4 ボラティリティ指標
ヒストリカルボラティリティ
ヒストリカルボラティリティ = 過去N日のリターンの標準偏差 x sqrt(252)(年率換算)
計算例:
日次リターン標準偏差 = 2%
年率換算ボラティリティ = 2% x sqrt(252) ~ 31.7%
| 年率換算ボラティリティ | 典型的資産 | リスクレベル |
|---|---|---|
| 10-15% | 債券、大型優良株 | 低 |
| 20-30% | 通常株式 | 中 |
| 40-60% | 小型株、暗号通貨 | 高 |
| 80%+ | アルトコイン、期限切れオプション | 極端 |
ATR(Average True Range)
ATRは「真のボラティリティ範囲」を測定し、ギャップを考慮:
True Range = max(
今日の高値 - 今日の安値,
|今日の高値 - 昨日の終値|,
|今日の安値 - 昨日の終値|
)
ATR = True RangeのN日平均
ATRの実用的使用法:
- 損切り設定: 損切り距離 = エントリー価格 +/- 2 x ATR
- ポジションサイジング: ボラティリティが高い時はポジション削減、低い時は増加可能
- ブレイクアウト確認: ブレイクアウト > 1 x ATR の方が本物の可能性が高い
4.5 戦略評価指標
これらの指標は戦略パフォーマンスを評価し、取引シグナルではない:
シャープレシオ
シャープレシオ = (Rp - Rf) / sigma_p
Rp = ポートフォリオリターン
Rf = リスクフリーレート(例:国債利回り)
sigma_p = リターンの標準偏差
直感的理解: リスク単位あたりの超過リターンはいくらか。
| シャープレシオ | 評価 |
|---|---|
| < 0 | 損失、銀行預金より悪い |
| 0-1 | 平均、リスクに見合わない可能性 |
| 1-2 | 良い |
| 2-3 | 優れている |
| > 3 | トップレベル(またはデータ問題) |
その他のリスク指標
| 指標 | 式 | 意味 |
|---|---|---|
| Sortino比 | (Rp - Rf) / sigma_downside | 下方ボラティリティのみペナルティ、損失リスクに焦点 |
| 最大ドローダウン | 最大ピークからトラフへの下落 | 最悪ケース損失 |
| Calmar比 | 年率リターン / 最大ドローダウン | リターンとドローダウンのバランス |
| VaR(95%) | 95%信頼区間での最大損失 | 通常条件下のリスク境界 |
例:
- 年間リターン20%、最大ドローダウン40%の戦略 -> Calmar = 0.5(平均)
- 年間リターン15%、最大ドローダウン10%の戦略 -> Calmar = 1.5(優れている)
4.6 指標組み合わせ: シグナルから特徴量へ
なぜ単一指標が機能しないのか
実証研究によると、単一のテクニカル指標は予測力が非常に限られている:
| 戦略 | 勝率 | 年率リターン(手数料後) |
|---|---|---|
| MACDゴールデン/デッドクロス | 51% | -5%から+3% |
| RSI買われすぎ/売られすぎ | 52% | -3%から+5% |
| Bollinger Bandブレイクアウト | 50% | -8%から+2% |
| 二重移動平均クロス | 53% | -2%から+8% |
注: これらの数字は例示/参考値。実際のパフォーマンスは市場、時間枠、パラメータ設定、コスト仮定(手数料、スリッページ、買値売値スプレッド)によって大きく異なる。常に自分のバックテストで検証すること。
理由:
- すべての市場参加者が同じシグナルを見る -> シグナルが早期に価格に織り込まれる
- 異なる市場状態は異なる解釈が必要 -> 単一ルールは適応できない
- 指標情報が不完全 -> 多次元検証が必要
指標の正しい使用法:特徴量として
伝統的使用法(間違い):
RSI < 30 -> 買い
正しい使用法(特徴量エンジニアリング):
特徴ベクトル = [
RSI,
RSI変化率,
MACD_DIFF,
MACDヒストグラム変化率,
Bollinger Band位置(バンド内の価格の相対位置),
ATR(ボラティリティ),
出来高変化率,
...より多くの特徴量
]
-> MLモデルに入力 -> 出力: 買い/売り/保持 + 信頼度
マルチエージェントの視点:
- Trend Agent: MACD、移動平均、ATRに焦点
- Mean Reversion Agent: RSI、Bollinger Bands、偏差に焦点
- Regime Agent: ボラティリティ変化、相関変化に焦点
- Risk Agent: VaR、最大ドローダウン、Sharpe変化に焦点
コード実装(オプション)
実践したい場合、指標を計算するサンプルコードはこちら:
import pandas as pd
import numpy as np
def calculate_indicators(df):
"""
一般的なテクニカル指標を計算
dfには列が必要: open, high, low, close, volume
"""
# EMA
df['EMA12'] = df['close'].ewm(span=12).mean()
df['EMA26'] = df['close'].ewm(span=26).mean()
# MACD
df['MACD_DIFF'] = df['EMA12'] - df['EMA26']
df['MACD_DEA'] = df['MACD_DIFF'].ewm(span=9).mean()
df['MACD_Histogram'] = 2 * (df['MACD_DIFF'] - df['MACD_DEA'])
# RSI
delta = df['close'].diff()
gain = delta.where(delta > 0, 0).rolling(14).mean()
loss = (-delta.where(delta < 0, 0)).rolling(14).mean()
# ゼロ除算を回避: loss=0(連続上昇)の場合、RSI=100
rs = gain / loss.replace(0, np.nan)
df['RSI'] = (100 - 100 / (1 + rs)).fillna(100)
# Bollinger Bands
df['BB_Middle'] = df['close'].rolling(20).mean()
df['BB_Std'] = df['close'].rolling(20).std()
df['BB_Upper'] = df['BB_Middle'] + 2 * df['BB_Std']
df['BB_Lower'] = df['BB_Middle'] - 2 * df['BB_Std']
df['BB_Position'] = (df['close'] - df['BB_Lower']) / (df['BB_Upper'] - df['BB_Lower'])
# ATR
high_low = df['high'] - df['low']
high_close = (df['high'] - df['close'].shift()).abs()
low_close = (df['low'] - df['close'].shift()).abs()
tr = pd.concat([high_low, high_close, low_close], axis=1).max(axis=1)
df['ATR'] = tr.rolling(14).mean()
return df
def calculate_sharpe_ratio(returns, risk_free_rate=0.04, periods_per_year=252):
"""シャープレシオを計算"""
excess_returns = returns - risk_free_rate / periods_per_year
return np.sqrt(periods_per_year) * excess_returns.mean() / returns.std()
レッスンの成果物
このレッスンを完了すると、以下を持つことになる:
- テクニカル指標の正しい理解 - 指標は「特徴量」であり「シグナル」ではないことを知る
- 一般的な指標の計算方法 - MACD、RSI、Bollinger Bands、ATRの本質を理解する
- 戦略評価能力 - Sharpe、Sortino、Calmarなどの指標を使用して戦略を評価できる
- 多次元思考フレームワーク - 異なる市場状態とAgentにどの指標が適しているかを知る
主要なポイント
- テクニカル指標の本質を理解する:価格/出来高の数学的変換、新しい情報は作られない
- トレンド指標(MACD)とオシレーター指標(RSI、Bollinger Bands)の使用法を習得する
- ダイバージェンス分析の原理と限界を理解する
- シャープレシオなどの指標を使用して戦略パフォーマンスを評価することを学ぶ
- 単一指標の限界を認識する。特徴量としての指標組み合わせの価値を理解する
拡張読書
- 背景: AlphaとBeta - 戦略リターン分解
- 背景: 有名なクオンツ災害 - 指標に過度に依存するコスト
次のレッスンプレビュー
レッスン 05: 古典的戦略パラダイム
トレンドフォロー、平均回帰、グリッド取引、ペア取引... これらの古典的戦略の特徴は何か?どの市場に適しているか?落とし穴は何か?次のレッスンで一つずつ分解する。