カルマンフィルターで価格ノイズを削るトレード戦略の考え方

テクニカル指標

チャートを眺めていると、「上がっているのか下がっているのか、どちらとも言えない細かいノイズ」に悩まされることが多いです。特に短期足では、ランダムに見える値動きの中からトレンドだけを取り出したいと考える投資家は多いと思います。そこで本記事では、工学やロボット制御の世界で使われているカルマンフィルターを、トレードに応用する考え方について詳しく解説します。

数学的な式を厳密に追いかけるのではなく、「どのような発想でノイズを削り、どのようにエントリー・イグジットに繋げるのか」という実務的な視点に焦点を当てます。株、FX、暗号資産など、価格時系列がある市場なら基本的に同じ考え方で応用できます。

スポンサーリンク
【DMM FX】入金

カルマンフィルターとは何か ― 「真の価格」と「観測ノイズ」を切り分ける発想

カルマンフィルターは、もともとロケットや航空機の位置推定、GPSの誤差補正などに使われてきた手法です。そこでは、「本当の位置(真の状態)」と「センサーで観測された値(ノイズを含む測定)」を区別し、現在の位置をできるだけ正確に推定することが求められます。

この考え方を価格チャートに当てはめると、次のように置き換えられます。

一つ目に、市場には「本当のトレンド(真の価格の流れ)」があると仮定します。二つ目に、実際に私たちがチャートで見るローソク足の終値は、その真のトレンドにランダムなノイズが加わったものとみなします。三つ目に、カルマンフィルターは「過去の情報」と「現在の価格」を組み合わせて、この真のトレンドを逐次的に推定しようとするアルゴリズムです。

移動平均線も「ノイズをならしてトレンドを見やすくする」という目的では似ていますが、カルマンフィルターの特徴は、未来を全く見ない“オンライン”な推定をする点と、ノイズの強さに応じて自動的に滑らかさを調整できる点にあります。

移動平均線との違い ― 「固定の窓」か「賢い更新」か

移動平均線(SMAやEMA)は、直近N本の価格を単純に平均したり、指数的な重み付けをして滑らかにします。しかし、パラメータは基本的に固定で、「相場が荒いから少し滑らかにしよう」といった自動調整はしてくれません。

例えば、20期間移動平均線を使っているとします。ボラティリティが低く穏やかな相場では、20期間でも十分にトレンドを捉えられますが、急騰急落が続く荒い相場では、同じ20期間でもノイズが多く見えてしまうことがあります。それでもインジケーターそのものは設定を変えてくれないので、トレーダーが手動で期間を調整する必要があります。

一方カルマンフィルターは、「価格のブレが大きいときは観測値をやや疑い、過去の推定値を重視する」「価格のブレが小さいときは観測値を信じて素早く追従する」といった形で、状況に応じて自動的にバランスを変える仕組みを持っています。このため、同じロジックでも、レンジ相場とトレンド相場の両方で無難に機能しやすいという特徴があります。

カルマンフィルターをチャートでどうイメージするか

実際のチャートでカルマンフィルターを適用すると、終値の上を滑らかに通る一本のラインとして表示されることが多いです。一見すると「少し賢い移動平均線」のように見えるかもしれません。

ただし、その裏側では次のようなことをしているとイメージすると理解しやすくなります。

第一に、「前の足までの推定トレンド」と「今の足の価格」がどれくらいズレているかを測ります。第二に、そのズレが、想定しているノイズの範囲内かどうかを判断します。第三に、ズレが小さいなら「たまたまのブレ」とみなして、推定トレンドを大きくは動かしません。第四に、ズレが大きいなら「新しい情報が出てトレンドが変わりつつある」と考え、推定トレンドを大きく更新します。

つまりカルマンフィルターのラインは、「過去の自分(これまでのトレンド認識)」と「新しい価格情報(今の足)」を毎バーごとに交渉して、折り合いをつけた結果として描かれていると考えられます。

カルマンフィルターを使ったシンプルなトレンドフォロー戦略

ここからは、カルマンフィルターを使ったシンプルなトレンドフォロー戦略の考え方を具体的に説明します。ここでは、FXの1時間足チャートを例にしますが、株や暗号資産にも応用可能です。

戦略の基本ルール

第一に、チャートに終値とカルマンフィルターラインを表示します。第二に、価格がカルマンフィルターラインを上抜けし、なおかつ一定期間ラインが右上がりで推移している場合を「上昇トレンドの初動」とみなします。第三に、価格がカルマンフィルターラインを下抜けし、ラインが右下がりで推移している場合を「下降トレンドの初動」とみなします。第四に、上昇トレンドであれば押し目で買い、下降トレンドであれば戻りで売るという、トレンドフォローの基本に従います。

この戦略のポイントは、「単なるクロスではなく、ラインの傾きも確認する」ことです。カルマンフィルターはノイズを削るとはいえ、1回のクロスだけで方向転換と判断してしまうとダマシが増えます。ラインがしばらく右上がり(または右下がり)を維持していることを条件にすることで、「トレンドらしさ」をフィルタリングするイメージです。

具体的な取引例

例えば、ドル円1時間足で、ある時点まで長らくレンジ相場が続いていたとします。カルマンフィルターラインもほぼ横ばいで、価格が上下に行き来する状況です。この期間は、トレンドフォロー戦略ではエントリー頻度を抑え、様子見に徹します。

その後、重要指標発表をきっかけにドル円が上方向へブレイクし、ローソク足がカルマンフィルターラインを明確に上抜けたとします。同時に、その後数本の足でラインの傾きが右上がりに変わり、一定の角度を保ち続けていることが確認できたとしましょう。その時点で「上昇トレンドが発生した」と判断し、押し目を待って買いエントリーを検討します。

具体的には、上昇トレンド中に一時的な調整で価格がカルマンフィルターライン近辺まで戻ってきたタイミングで、ローソク足の反発を確認して買いポジションを建てます。損切りは直近安値の少し下に設定し、利確はリスクリワード比1:2以上を目安に、あるいはカルマンフィルターラインを明確に下抜けたところで手仕舞うといった運用が考えられます。

カルマンフィルターのパラメータ設定 ― 「ノイズの大きさ」をどう見積もるか

実際にカルマンフィルターを実装する際には、状態ノイズ観測ノイズという二つのパラメータを設定する必要があります。簡単に言えば、「真のトレンドがどれくらい滑らかに変化すると想定するか」と「観測価格がどれくらいブレると想定するか」を数値で表現します。

状態ノイズを大きく設定すると、フィルターは「トレンドは急に変わりうる」と考え、最新の価格情報に素早く追従するようになります。その分、ラインは価格に近づき、小回りの効いたトレンドフォローが可能ですが、ダマシに反応しやすくなります。逆に状態ノイズを小さく設定すると、「トレンドはなかなか変わらない」とみなし、ラインは非常に滑らかになります。その代わり、トレンド転換への反応は遅くなります。

観測ノイズは、「価格のランダムなブレの大きさ」をどの程度とみなすかを決めるパラメータです。観測ノイズを大きく設定すると、「価格はかなりブレるので、あまり信用できない」と判断し、フィルターは過去の推定値を重視して滑らかなラインになります。観測ノイズを小さくすると、「価格は比較的安定している」とみなされ、最新の価格に近いラインになります。

初めて使うときは、ボラティリティに応じていくつかのパラメータセットを用意し、バックテストで比較するのが現実的です。例えば、「トレンドフォロー寄りの設定」「スイング寄りの設定」「かなり長期のトレンド把握用の設定」といった具合に複数パターンを用意し、通貨ペアや銘柄ごとに最適な組み合わせを探っていくイメージです。

カルマンフィルターと他の指標を組み合わせるアイデア

カルマンフィルター単体でもトレンドフォロー戦略は組めますが、他のインジケーターと組み合わせることで精度を高めることができます。ここでは、初心者でも扱いやすい組み合わせ方を三つ紹介します。

1. カルマンフィルター × RSIで「順張りでも押し目を待つ」

一つ目の例は、カルマンフィルターでトレンドの有無を確認し、RSIで押し目・戻りを測る方法です。具体的には、カルマンフィルターラインが右上がりのときだけ買い目線に絞り、RSIが30〜40近辺まで一時的に下がったところを押し目買い候補とします。逆にラインが右下がりのときだけ売り目線に絞り、RSIが60〜70近辺まで一時的に上がったところを戻り売り候補とします。

この組み合わせにより、「トレンド方向には素直に従いつつも、割高・割安感があるポイントまで待ってからエントリーする」という、バランスの取れたトレードが実現しやすくなります。

2. カルマンフィルター × ボリンジャーバンドで「ボラティリティの伸び」を捉える

二つ目の例は、ボリンジャーバンドと組み合わせて「トレンド+ボラティリティの拡大」を狙う方法です。カルマンフィルターラインが右上がりで、同時にボリンジャーバンドがスクイーズ状態からエクスパンションに移行するタイミングは、強いトレンドが生まれやすい局面です。このとき、価格がカルマンフィルターラインのやや上側で推移しているなら、押し目を狙って買いエントリーを検討します。

下降トレンドでは逆の考え方で、ラインが右下がりでバンドが広がり始め、価格がラインのやや下側で推移しているときに戻り売りを狙うことができます。カルマンフィルターが「方向」、ボリンジャーバンドが「勢い」を示す役割を担うイメージです。

3. カルマンフィルター × 出来高系指標(OBVなど)

三つ目の例は、出来高の流れと組み合わせる方法です。カルマンフィルターが上向きで価格もそれに沿って上昇しているのに、OBVなどの出来高系指標が伸び悩んでいる場合、上昇トレンドの勢いが弱くなりつつあるサインかもしれません。逆に、カルマンフィルターが下向きで価格も下落している局面で、OBVが下方向に力強く伸びているなら、その下降トレンドはしばらく継続する可能性が高まります。

このように、カルマンフィルターは「価格の方向性を滑らかに示す軸」として使い、その上にモメンタムや出来高を重ねて総合的に判断することで、より質の高いエントリー・イグジット判断に近づけます。

バックテストと検証のポイント

カルマンフィルターを実際の戦略に組み込む前に、必ずバックテストで検証することが重要です。特に、以下のポイントを意識して検証すると、戦略の癖が見えやすくなります。

第一に、「トレンドが強く出た局面」でのパフォーマンスを確認します。カルマンフィルターはトレンドフォローに向くため、強いトレンドが続いた期間でどれだけ利益を伸ばせたかをチェックします。第二に、「レンジが長く続いた局面」でのドローダウンを確認します。レンジ相場では連続したダマシが発生しやすいため、損切り幅やエントリー条件が適切かどうかを慎重に見ます。

第三に、ロットサイズやリスク許容度を変えた場合の資産曲線を比較します。トレンドフォロー戦略は勝率が低めでも損小利大を狙える一方、大きな連敗も発生し得ます。そのため、1トレードあたりのリスクを口座残高の何パーセントに抑えるのか、レバレッジをどの程度まで許容するのかといった資金管理ルールもセットで検証することが重要です。

実際に導入する際のステップ

最後に、カルマンフィルターをトレードに取り入れる具体的なステップを整理しておきます。ここでは、プログラミング経験が浅い個人投資家でも現実的に進められる順番を意識しています。

第一に、「カルマンフィルター付きのインジケーター」をチャートソフトで探すか、公開されているスクリプトを利用してチャートに表示できる環境を整えます。具体的には、各種プラットフォームのインディケーター共有機能やコミュニティで「Kalman Filter」「Kalman Smoother」などと検索してみるところから始められます。

第二に、普段自分が取引している銘柄や通貨ペアのチャートにカルマンフィルターラインを重ね、「どのようなときに綺麗なトレンドを示し、どのようなときにダマシが多いか」を目で確認します。この段階では、実際にトレードするのではなく、あくまで観察と記録に徹するのが安全です。

第三に、自分なりのルール(例:ラインの傾き、価格との位置関係、他指標との組み合わせなど)を紙に書き出し、過去チャートを使って手動で検証します。10〜20件程度のサンプルだけでは偏りが出るので、できれば数百トレード分くらいを目標にサンプルを集めたいところです。

第四に、一定の手応えが得られたら、デモ口座や極小ロットで実際に運用してみます。リアルタイムでの感覚は、過去チャートの検証とはまた別の学びがあります。ここで、「思ったよりもエントリーのタイミングが取りにくい」「指標発表時にスプレッドが広がりすぎる」といった実戦ならではの課題が見えてきます。

第五に、実戦で得られた気づきをもとにルールを微調整し、「カルマンフィルターはあくまでトレンド把握の軸であり、全てを判断してくれる魔法の線ではない」というスタンスを保ちながら、自分のスタイルに合った形へと育てていきます。

まとめ ― ノイズの海からトレンドをすくい上げる一つの道具

カルマンフィルターは、価格ノイズに悩むトレーダーにとって、トレンドを滑らかに抽出するための有力な選択肢の一つになり得ます。移動平均線より少し複雑ではありますが、発想そのものは「真のトレンド」と「観測ノイズ」を切り分けるというシンプルなものです。

大切なのは、カルマンフィルターそのものよりも、「ノイズをどう扱い、どのような条件でトレンドとみなすか」という考え方です。本記事で紹介したように、ラインの傾きと価格の位置関係、他のインジケーターとの組み合わせ、バックテストと実戦を通じた検証プロセスをセットで行うことで、単なる理論ではなく、自分のお金を守りながら増やすための現実的なツールとして活かしやすくなります。

チャートのノイズに振り回されてしまいがちな方にこそ、一度カルマンフィルターという視点から相場を眺めてみることをおすすめします。トレンドの見え方が変わり、新しいエントリーとイグジットのヒントが見つかるかもしれません。

コメント

タイトルとURLをコピーしました