AIエージェントが仮想通貨のチャートを分析すると言うとき、実際に行われていることは大きく2種類に分かれます。そして、そのどちらであるかが、出力の価値を決めます。
1つ目の設計では、チャートを画像として、あるいは価格の表として言語モデルに見せ、何が見えるかを答えさせます。2つ目の設計では、決定論的なエンジンが指標を計算し、転換点を見つけ、幾何形状を照合して読み取り結果を確定させ、言語モデルはその完成した結果を文章にするためだけに使われます。
どちらも「AIによるチャート分析」と呼ばれます。しかし、同じチャートに対して同じことを二度言えるのは、片方だけです。この記事は、2つ目の仕組みが段階ごとに何をしているのかを、このサイトの背後にあるエンジンを実例として説明するものです。
6つの段階
| 段階 | 何が起きるか | モデルの関与 |
|---|---|---|
| 1. ローソク足の取得 | 1銘柄・1時間足のOHLCV系列を取引所の公開APIから取得 | なし |
| 2. 指標の計算 | 移動平均・ADX・RSI・MACD・ATR・ボリンジャー・OBV・VWAP・一目均衡表・出来高プロファイル | なし |
| 3. スイング検出 | 系列を、高値と安値が交互に並ぶ転換点へ縮約 | なし |
| 4. 形状の照合 | 転換点の並びを18種類の幾何定義と突き合わせ | なし |
| 5. スコアリング | 5つのレーンを重み付けして1つの総合値へ合成 | なし |
| 6. 文章化 | 確定した数値を読める文に変換 | あり |
6段階のうち5段階は算術です。モデルが登場するのは最後の段階、画面に出るすべての数値がすでに確定した後です。
この順序こそが、この設計のすべてです。以下はすべて、各段階がなぜそう作られているのか、そしてある段階をモデルに置き換えると何を失うのか、の詳述です。
段階1 — ローソク足と、その出どころ
入力はOHLCV系列です。各足の始値・高値・安値・終値・出来高。それだけです。ニュースフィードも、SNSのセンチメントも、板情報も使いません。
データ源は取引所の公開RESTエンドポイントで、別の取引所をフォールバックとして持ちます。要求できる銘柄はURLで広げられるものではなく、固定のホワイトリストです。分析を開始するには最低60本のローソク足が必要です。以下のすべての指標には助走期間があり、半分しか埋まっていない移動平均から計算された読み取り結果は、読み取り結果がないことより悪いからです。
この段階は退屈です。そして、最も退屈であるべき段階でもあります。チャートを画像として読ませたモデルは、この時点ですでにこのデータを失っています。ピクセルから価格を推測しているのであって、47本目の終値を正確に復元することはできません。
段階2 — 指標の計算
系列から直接計算される標準的な定義です。移動平均とその構造、方向性指標を伴うADX、RSI、MACD、ストキャスティクス、ATR、ボリンジャーバンドとスクイーズ状態、OBV、ローリングVWAP、一目均衡表、そして直近120本の出来高プロファイル。
ここには、飛ばされがちだからこそ明記する価値のある性質が1つあります。これらの実装は「正しそうに見えるから信頼する」のではなく、参照実装と突き合わせて検証されています。わずかに間違ったRSI — 平滑化の方式が違う、初期期間が1つずれている — は、もっともらしい数値を永遠に出し続け、下流のすべてを静かに汚染します。検証は「RSIを計算した」と「何かを計算してRSIと呼んだ」を分けるものです。
段階3 — 足ではなくスイングを見る
形状は、生のローソク足ではなくスイングの転換点に対して照合されます。この1つの決定が、誤検出のクラスを丸ごと1つ排除します。ヒゲの長い1本の足がパターンを作ることはありません。1本の足では転換点が作れないからです。
転換点はジグザグ走査から得られます。極値の候補が転換点として確定するのは、価格がそこから ATR(14)の2.5倍、下限は価格の0.8% を超えて反転した後だけです。ここから2つの帰結が生まれます。
- しきい値がボラティリティ相対であること。固定パーセントでは、BTCの静かな週には緩すぎ、0.3ドルのアルトコインには厳しすぎます。ATRでスケールさせることで、1つの設定がホワイトリスト全体で妥当に振る舞います。
- ATRが定義されるまで検出が始まらないこと。定義前はしきい値がゼロに向かって潰れ、幅の広い1本の足だけで転換点が生まれてしまいます。
転換点は高値・安値・高値・安値と厳密に交互に並びます。そして最新の転換点には仮の印が付きます。価格がまだ、それを証明するだけ戻っていないからです。仮の転換点は形状の最後の位置にだけ入ることができ、中間に入ることはできません。まだ起きていない転換点の上に形を組み立てて、次の足で消えてしまう、という事態を防ぐためです。
この「仮」の扱いは、決定論的エンジンと画像を読むモデルの違いが最も明確に出る場所の1つです。チャート画像を見ているモデルには、まだ確定していない転換点という概念がありません。見えるのは形だけです。そしてチャートの右端付近の形は、希望的観測によるパターン認識が最も起きやすい場所です。
段階4 — 幾何で定義された18の形状
認識対象は反転型と継続型に分かれます。
反転型 — ダブルトップ/ダブルボトム、トリプルトップ/トリプルボトム、ヘッドアンドショルダーズとその逆、ラウンディングボトム、カップウィズハンドル、上昇ウェッジ/下降ウェッジ。
継続型 — 上昇/下降/対称三角形、レクタングル、ブルフラッグ/ベアフラッグ、ブルペナント/ベアペナント。
いずれも転換点の並びに対する幾何条件の集合です。このうち4つの条件は明示する価値があります。どれも、素直に実装すると間違える場所だからです。
一致判定は価格比ではなく形状の高さでスケールする
「2つの山が互いに3%以内」というのは、ダブルトップの定義として一見もっともらしく聞こえます。しかしこれは、価格の20%に及ぶ形状では強い一致であり、4%しかない形状ではまったく無意味です。それでも価格比の判定は、両者を同一に採点してしまいます。
そこで山どうしは、その形状自身の高さのおよそ5分の1以内で一致することを要求されます。判定基準が、測定対象そのものに合わせてスケールします。
トレンドラインの品質は決定係数ではなく最悪残差で見る
トレンドラインの品質を測る直感的な指標は、線が説明する分散の割合、すなわち決定係数です。ここではこれが誤った指標であり、しかも最も価値のある検出を狙い撃ちで壊す形で誤っています。
水平なトレンドラインには、説明すべき分散がほとんどありません。教科書的な上昇三角形の水平な上辺 — 継続型で最も認知度の高い形状 — は、決定係数がほぼゼロになります。決定係数でふるいにかけると、これが弾かれます。
そこでエンジンは、各接触点が自分の線から形状の高さの18%以内に収まることを要求します。これは水平な境界にも傾いた境界にも同じように正しく機能します。
丸い底はV字に勝たなければならない
放物線は鋭いV字反転にも十分よく当てはまり(決定係数で0.94程度)、決定係数のしきい値ではラウンディングボトムとV字を区別できません。そこで両方のモデルを当てはめます。放物線と、安値で分割した2本の直線です。そして放物線が実際に比較で勝った場合にのみ、丸いと判定します。さらに、両端を結ぶ弦から底がどれだけ垂れ下がっているかを表すサジッタに最小値を課すことで、誤検出の大半を占めるゆるやかな単調ドリフトを排除します。
反転型は、極値の位置で何かを反転していなければならない
レンジの真ん中にある「ダブルトップ」は、単に転換点が3つ並んでいるだけです。反転型の形状には、逆方向の動きに続いて出現していることと、直前のチャートの極値付近に位置していることの両方が要求されます。この条件がないと、横ばい相場は反転パターンを延々と生成し続け、そのすべてが無意味になります。
信頼度と、報告するかどうかを決めるしきい値
すべての検出は0から1の信頼度を伴います。これは名前の付いた成分の加重平均で、成分は形状と一緒に持ち回られ、画面に描画されます。だからこの数値は、根拠のない断言になりません。
| 成分 | 何を測っているか |
|---|---|
| similarity | 繰り返された試しがどれだけ近いか |
| magnitude | 形状の高さ(ATR単位) |
| symmetry | 各脚の期間のバランス |
| volume | 出来高が教科書どおりに振る舞ったか |
| prior_trend | 反転する対象となる動きがあったか |
| extremity | 形状がチャートの極値付近にあるか |
| completion | 判定線が実際にブレイクされたか |
| containment | 価格が境界を尊重していたか |
| upper_fit / lower_fit | 接触点が線にどれだけ密着しているか |
| roundness / sagitta | 丸い底のための曲率の証拠 |
報告のしきい値の既定値は 0.72 で、これは好みではなく計測によって決められています。10個の教科書的な検証用データと、40本の独立した400本ランダムウォークを検出器に通した結果です。
| 教科書データ | ランダムウォーク | |
|---|---|---|
| 信頼度の中央値 | 約0.88 | 約0.74 |
| 最弱/最強 | 約0.79(最小) | 約0.80(最大) |
| 何らかの形状が出た系列 | 10 / 10 | 14 / 40 |
最後の列を先に読んでください。純粋なランダムウォーク40本のうち14本で、検出器が名前を付ける気になる形状が出ています。パターン認識は雑音の中にパターンを見つけます。それがパターン認識のすることだからです。
次に裾を読んでください。雑音の中で見つかった最良の形状は、本物の教科書データの中で最も弱いものと同程度の点数を取ります。2つの母集団は中央値では明確に分離し、端では重なります。そしてどんなしきい値でもこれは解消できません。これはバグではなく、問題そのものが持つ性質だからです。本当に曖昧な形状は存在し、それを完全に抑制すれば本物も一緒に捨てることになります。
そこから導かれる設計判断は、曖昧な形状を隠すのではなく、報告したうえで低い点数を付けることです。0.72はこの信号の下限より下に置かれており、不完全な現実の形状は浮上しつつ、雑音の大半は落ちます。この2つの性質はテストで固定されています。ランダムウォークから何かが出るのは最大40%まで、教科書データの信頼度中央値は雑音の90パーセンタイルより上を保つこと。だからしきい値が知らぬ間にずれることはありません。
沈黙も答えであり、よくある答えである
何も返さないことは正当な結果です。ランダムウォークのデータでは検出器は大半の系列で沈黙し、現実のチャートでも、沈黙している時間のほうが長いのが普通です。
これは自動チャートツールにおいて最も重要な挙動であり、同時に最も宣伝しにくい挙動です。平常日に「教科書的な形状は現れていません」と答える製品は、常に何かを見つける製品より退屈です。そして、何かを見つけた日に信頼できるのは、前者だけです。
沈黙が正常な出力であることには、もう1つ実務的な意味があります。検出件数そのものが、そのツールのしきい値の厳しさを示す指標になるということです。9年分・182,341本のローソク足から検出された完成形状が661件というのは、1,000本あたり3.6件という密度です。同じ期間から数千件の形状を報告するツールがあれば、それは異なる相場を見ているのではなく、異なるしきい値を使っています。どちらが正しいという話ではありませんが、報告件数を公表していないツールについては、その厳しさを利用者が知る手段がありません。
複数の読みが同時に成立するとき
同じ値動きが、複数の誠実な読みを同時に支持することはよくあります。水平な上辺と切り上がる安値を持つチャートは、その内側に本当にダブルトップを含んでいます。
重なり合った検出は競合し、勝者は信頼度に加えて「その読みが説明している転換点の数」への小さな加点で決まります。したがって同じ区間では、6つの転換点を説明する上昇三角形が、3つしか説明しないダブルトップに勝ちます。この加点は順序付けにだけ影響します。報告される信頼度が加点によって書き換えられることはないので、表示される数値は常に自身の成分内訳と一致します。
段階5 — 重みを公開したスコアリング
5つのレーンが独立に計算され、1つの総合値へ合成されます。
| レーン | 重み | 入力 |
|---|---|---|
| トレンド | 0.30 | 移動平均の構造、方向性指標を伴うADX、一目均衡表の位置 |
| モメンタム | 0.25 | RSI、MACD、ストキャスティクス |
| 形状 | 0.20 | 段階4の形状(あれば) |
| 出来高 | 0.15 | OBV、VWAPに対する位置、出来高プロファイル |
| ボラティリティ | 0.10 | ボリンジャーバンド内の位置、スクイーズ状態 |
重みは内部に隠さず、スコアの隣に描画するために外部公開されています。「トレンドスコア」というラベルの付いた1つの数値が擁護できるのは、それを生んだものを正確に見られる場合だけです。そして表を公開することには第二の効果があります。重みの変更が、静かなチューニングではなく、目に見える製品変更になるということです。
順序には理由があります。トレンドが支配的なのは、この総合値が明示的にトレンドのスコアだからです。モメンタムはトレンドの最も強い独立した裏付けです。形状は存在すれば情報量が大きい一方でしばしば不在であり、何も検出されないときは中立の50を寄与します。ここに大きな重みを与えれば、形状が存在しない大多数の日において、すべてのスコアを真ん中へ引きずるだけになります。出来高は価格を先導するのではなく追認します。ボラティリティは5つの中で最も方向性が弱く、意図的に最小の項にしてあります。
いずれかのレーンが欠けた場合、総合値は実際に存在する重みで正規化されます。欠けたレーンが結果を静かにゼロ方向へ引っ張るのではなく、残りを再スケールします。
段階6 — 言語モデルがようやく登場する
ここまでのすべてが数値を生みました。モデルの仕事は、それを文にすることだけです。
モデルは水準を変えられません。形状の名前を付け替えられません。成分のスコアを捏造できません。完成した構造を受け取り、それについて文章を書き、その出力は表示前に構造と照合されます。
失敗時の退避手順は説明する価値があります。それが、このモデルが本当は何のためにあるのかを示すからです。モデルの返答が検証に失敗した場合、1回だけ再試行します。再び失敗した場合、決定論的なテンプレート文へ退避します。それも使えない場合、文章は単に表示されません。そして分析自体は表示され続けます。分析はそもそもモデルが作るものではなかったからです。
壊れても文章だけが劣化し、数値は劣化しない部品は、そもそも構造を支えていなかった部品です。
1回の分析で画面に何が出るか
段階1から6は、内部で隠れて走るのではなく、進行中の状態としてそのまま画面に流れます。利用者が見るのは、次のようなものです。
まず、いま処理がどの段階にいるかが順に点灯します。取得中、指標を計算中、転換点を検出中、形状を照合中、採点中、文章化中。各段階には実際の経過時間が表示されます。ここは実測値であることに意味があります。UIが速そうに見えることは許されても、存在しない所要時間を表示することは許されない、という線引きです。
次に、いまの値動きの要約が出ます。直近の終値、直近N本の変化率、表示期間のレンジ、読み込んだ本数。そのうえで、5つのレーンそれぞれのスコアと、それを合成した総合スコアが、重み表とともに出ます。
形状が検出された場合は、その名前・信頼度・成分の内訳が並び、チャート上にはその形状を構成する線と点が重ねて描かれます。どの転換点を根拠にその形と判定したのかが、目で追える状態になります。そして最後に、その形状が過去に完成したあと5本後・10本後・20本後・60本後に実際どうなったかの記録が、サンプル数つきで添えられます。
形状が検出されなかった場合は、この節が「教科書的な形状は現れていません」の一文になります。前述のとおり、これが最も頻繁な出力です。
なぜ画像を読ませる方式では再現性が失われるのか
「チャートのスクリーンショットをアップロードすると分析してくれる」タイプのツールは、この分野で最も数が多い形態です。使い心地は良く、実際に有用な場面もあります。ただし、この記事の観点からは3つの構造的な問題を抱えています。
1つ目は、入力が不可逆に劣化していることです。 画像には47本目の終値が数値として存在しません。モデルはピクセルの位置から価格を推測しており、軸のスケールが対数か線形か、どこが切れているかによって推測は変わります。段階3以降のすべての幾何判定は正確な価格系列を前提にしているため、ここで失われた精度は後段では復元できません。
2つ目は、出力が確率的であることです。 同じ画像を2回投げれば、2回とも同じ答えが返る保証はありません。これは欠陥ではなく、生成モデルの正常な挙動です。しかし「この形状は過去にこうなった」という統計を出そうとした瞬間に、検出の母集団が定義できないという問題に変わります。
3つ目は、根拠の説明が事後的であることです。 モデルは結論を出したあとに理由を書きます。その理由は説得力を持つように書かれますが、結論を実際に生んだ計算過程とは別物です。信頼度0.72という数値が、similarity・magnitude・symmetryといった名前の付いた成分の加重平均であり、その成分が画面に出ている、という構造とは根本的に異なります。
繰り返しになりますが、これは画像方式が役に立たないという主張ではありません。定義上できないことがある、という指摘です。
2つの設計が主張できること・できないこと
| 決定論エンジン+モデルが文章化 | モデルがチャートを読む | |
|---|---|---|
| 同じチャートに同じ答え | はい | いいえ |
| 公表ヒット率が再現可能 | はい | 定義できない |
| 正確な価格が使える | はい | 画像経由なら推測 |
| 形状の点数の理由を説明できる | はい(成分ごと) | 事後的な説明のみ |
| 未知の銘柄を扱える | はい(同じ幾何) | はい(挙動は不定) |
| 「何もない」と確実に言える | はい(しきい値による) | 実際にはまれ |
| 誰も定義していない形を認識する | いいえ | ときどき |
最後の行は、モデル先行型設計の本物の長所であり、軽く扱うべきではありません。決定論的エンジンは、誰かが座って符号化した18の形状しか見つけられません。19番目には永遠に気づきません。
しかし2行目を見てください。これらのツールを評価しようとする人にとって、本当に効いてくるのはここです。ヒット率 — 形状のうち教科書的な方向へ決着した割合 — は、そもそも定義するために固定された検出手続きを必要とします。手続きが「モデルに聞く」であれば、測定対象となる安定した検出の母集団が存在せず、それについて公表されたどんな割合も反証不可能になります。これはモデルの能力への批判ではありません。何が測定可能かという構造上の事実です。
この設計にできないこと
率直に書きます。
- 予測をしない。いまチャートに何があるかを名指しし、同じ形状の後に歴史的に何が続いたかを添えるだけです。どちらも予測ではなく、歴史的な記録のほうもサンプルが薄いため、予測として読むべきではありません。
- 価格と出来高しか見ていない。ニュースも、資金調達率も、オンチェーンのフローも、ポジション状況も見ていません。チャートの形をした答えは、チャートの形をした答えでしかありません。
- その形状が重要かどうかは言えない。統計的な有意性は幾何が確立できるものではありません。だからサンプル数を別途公表しています。
- 18形状は閉じた集合である。その外側にあるものは、人間には明らかであってもエンジンには見えません。
- 決定論的であることは正確であることではない。一貫して間違っていることもまた一貫性です。再現性は主張を検証可能にするものであって、主張を正しくするものではありません。
自動化で置き換わるのは判断ではなく、一貫性である
自動化されたチャート分析に期待すべきことを1つに絞るなら、それは「人より賢く読むこと」ではなく「毎回同じ基準で読むこと」です。
人がチャートを読むとき、しきい値は無意識に動きます。ポジションを持っている銘柄では形が見えやすくなり、損失を抱えている局面では反転の形が目に入りやすくなります。これは能力の問題ではなく、認知の構造です。そして最も厄介なのは、見送った候補と、そもそも気づかなかった候補を、人は数えられないという点です。
ヒット率という数値には分母が必要です。分母とは「検出されたすべての形状」であり、これは目視によるレビューが原理的に供給できないものです。固定されたしきい値を持つエンジンは、その構造上、分母を生成します。この記事で説明してきた0.72という数値も、ATRの2.5倍という反転条件も、18%という接触許容範囲も、すべては「毎回同じ母集団を作る」ためにあります。
その代償として、エンジンは柔軟性を失います。人間なら一目で「これは実質的にダブルトップだ」と分かる形でも、条件を1つ満たさなければエンジンは沈黙します。この硬直性は欠点であり、同時に、数えられる分母を持つための必要条件でもあります。両方を同時に持つことはできません。
AIチャートツールに投げるべき5つの質問
- モデルはどの段階にいるか。数値を作る側にいれば、再現性は失われています。
- 形状が存在しないチャートで何が起きるか。常に何かを見つけるツールには、しきい値がありません。
- 信頼度は内訳まで出るか。成分のない裸のスコアは、ただの断言です。
- スコアの重みは公開されているか。されていなければ、誰にも気づかれずに再チューニングできます。
- ヒット率を、サンプル数と検出しきい値とセットで出せるか。この3つが同時に出てこなければ、その割合は評価できません。
まとめ
- 「AIチャート分析」は、性質が正反対の2つの設計を指しています。モデルがどの段階にいるかが、両者を分ける問いです。
- このエンジンでは6段階のうち5段階が決定論的な算術です。モデルは確定した結果について文章を書くだけで、何も変えられません。
- 形状は足ではなくスイングの転換点に対して照合され、しきい値は固定パーセントではなくボラティリティに合わせてスケールします。
- 信頼度しきい値0.72は、教科書データとランダムウォークを突き合わせて決められました。純粋な雑音40本のうち14本からも、名前の付く形状が出ています。
- 沈黙は正常な出力であり、必要な出力です。
- 決定論が買えるのは再現性であって正確さではありません。それは、公表されたヒット率をそもそも検証可能にするためのものです。