
カーブフィッティングとは|過去に合わせすぎて後で崩れる設定選び

カーブフィッティング(過剰最適化)の意味
カーブフィッティングは、過去のデータに設定を合わせすぎることです。過剰最適化、オーバーフィッティング、過学習とも呼ばれます。EAの設定(移動平均の本数など)を総当たりで動かし、過去の成績が一番よかった組を選ぶと、その成績には、その期間にだけ起きた偶然の動きに合っていた分も含まれます。その分は、選んだあとの期間には持ち越されません。
試す設定の数が増えるほど、過去の最良の結果が偶然でよく見えやすくなることは、研究でも指摘されています。Baileyらの論文「The Probability of Backtest Overfitting」は、過去のデータで最良だった設定が、ほかの期間でどれだけ見劣りするかを確率で見積もる方法を示しています。同じ著者らの「Pseudo-Mathematics and Financial Charlatanism」(Notices of the AMS、2014年)は、バックテストの過剰最適化が、そのあとの成績に与える影響を扱っています。
今回の測り方
データは、Dukascopy のティックから作った足で、USD/JPY・EUR/USD・GBP/USD・EUR/JPY・AUD/JPYの1時間足(bid)です。期間は2016年1月〜2026年10月で、足の数は5通貨で336,913本(1通貨あたり67,093〜67,458本)です。売買は、終値の単純移動平均を2本使い、短期線が長期線より上なら買い、下なら売りとして、交差のたびに売買を入れ替える形です。損切りも利確もなく、スプレッドなどのコストは引いていません。同じ向きで持ち続けた1回を1件と数えます。
設定は、短期を3〜96本(3本刻みで32通り)、長期を100〜410本(10本刻みで32通り)とし、組み合わせの1,024組を総当たりしました。期間は、2021年5月までを前半、2021年6月以降を後半に分けました。前半の取引が100件以上ある組のうち、前半のPFが一番高い組を1つ選び、その組の後半のPFを見ています。PFは、総利益を総損失で割った値で、1を超えると利益が損失より大きいことを示します。「4組」「16組」「64組」「256組」は、1,024組の範囲を粗い刻みで間引いて探した場合です。
比べる相手には、各通貨の足ごとの値動き(終値の差)の順番だけをランダムに入れ替えた系列を使いました。値動きの大きさの集まりは同じで、順番に意味がない系列です。通貨ごとに30回ずつ、計150系列を作り、同じ探し方をしています。この測定は、どの設定が有利かを探すものではありません。選ぶ作業そのものが成績にどう影響するかを測っています。
前半で選んだ組は後半でどうなったか
図は、1,024組から前半のPFで選んだ組を、10年間持ち続けた累計損益(pips)です。前半が終わった2021年5月末の累計は、USD/JPYが4,524、EUR/USDが2,654、GBP/USDが2,933、EUR/JPYが3,129、AUD/JPYが3,480でした。2026年10月末は、順に6,166、2,121、3,679、1,637、2,885です。後半の増減は、USD/JPYが+1,643、GBP/USDが+746、EUR/USDが−532、AUD/JPYが−596、EUR/JPYが−1,493でした。後半に累計が増えたのは5通貨のうち2通貨で、3通貨は減りました。
アドバイス前半で選んだ組を後半も持ち続けると、5通貨のうち3通貨で累計が減ったよ。後半に増えたのはUSD/JPYとGBP/USDだけだね。
カーブフィッティングとパラメータ最適化|探す組が増えると前半のPFは上がる

探した組の数と前半・後半のPF
パラメータ最適化は、設定を動かして成績のよい組を探す作業です。探す組の数を4・16・64・256・1,024組と増やすと、選ばれた組の前半のPFは、5通貨の平均で1.12、1.18、1.25、1.28、1.30と上がりました。後半のPFは、0.96、0.95、0.97、0.99、1.00で、探す組が増えても、0.95〜1.00の範囲でした。後半が前半より低かったのは、4組では5通貨のうち4通貨、16組以上では5通貨すべてです。
1,024組すべての成績も見ておきます。コストを引いていない状態で、1,024組のPFの中央値は、前半が0.88、後半が0.95でした(5通貨の平均)。選ばれた組の後半のPFは、1,024組のうち42〜76%の組より高い位置にありました。前半で選んだ組が、後半でも上位に来るとは言えませんでした。
値動きを並べ替えた系列でも前半のPFは上がる

並べ替えた150系列で同じ探し方をすると、選ばれた組の前半のPFは、4組が1.14、16組が1.27、64組が1.35、256組が1.39、1,024組が1.43と上がりました。後半のPFは、1.02、1.02、1.01、1.01、1.01で、1付近のままです。後半が前半より低かった系列は、4組が150系列のうち101、1,024組が137でした。実際の足の後半のPF(0.95〜1.00)と、並べ替えた系列の後半(1.01〜1.02)の差は、最大でも約0.07です。
順番に意味のない系列でも、組を増やして一番よい組を選ぶと、前半のPFは上がり、後半は1付近に戻ります。前半のPFが高いというだけでは、その設定に意味があるのか、選んだ結果なのかは区別できません。なお、並べ替えた系列で選ばれた組の前半の取引は平均228件で、実際の足の平均395件より少なくなっています。取引が少ないほどPFは大きく振れるため、前半のPFの値そのものは、実際の足と並べ替えた系列で比べていません。
アドバイス組を1,024まで増やすと、前半のPFは平均1.30、後半は1.00だったよ。値動きを並べ替えた系列でも、前半は1.43まで上がったね。
カーブフィッティングの見分け方|隣の設定と取引回数を見る

隣の設定と前半・後半の順位
図は、USD/JPYの1,024組のPFを、前半と後半で色分けしたものです。前半で選ばれた組(短期21本・長期100本)は、長期の下限100本の端にあります。前半と後半で色の並び方は違い、前半で緑だった場所が後半も緑とは限りません。この見かたを数字にするため、1,024組のPFの順位が、前半と後半でどれくらい似ているかを、順位相関で測りました。順位相関は、−1〜1の値で、1なら前半で上位の組が後半も上位、0なら関係なし、マイナスなら逆の並びです。
順位相関は、USD/JPYが−0.21、EUR/USDが−0.37、GBP/USDが−0.41、EUR/JPYが+0.37、AUD/JPYが+0.24でした(前後半とも取引が100件以上の997〜1,024組)。5通貨の平均は−0.08で、符号も通貨でばらつきました。前半の順位が、後半の順位をそのまま教えてくれるとは言えません。
選ばれた組の隣(短期を3本、長期を10本ずらした最大8組)も見ました。隣の組の後半のPFの平均は、USD/JPYが1.05、GBP/USDが1.02、EUR/JPYが0.98、EUR/USDが0.96、AUD/JPYが0.93で、1を下回ったのは3通貨です。隣の前半のPFの平均は1.02〜1.31だったので、選ばれた組の周りでも、前半の水準は後半に続きませんでした。

表は、通貨ごとに選ばれた組です。前半のPFは1.19〜1.42、後半は0.94〜1.08で、後半のPFが1を超えたのはUSD/JPYとGBP/USDの2通貨でした。選ばれた組の1件あたりの平均損益は、前半が4.4〜12.0pips、後半が−2.2〜+3.9pipsです。スプレッドなどのコストは引いていないので、実際に取引する場合は、この数字からさらに差し引かれます。
取引回数とPFの偶然の振れ幅

取引が少ないと、PFは偶然でも大きく振れます。並べ替えた系列で、短期48本・長期250本の取引14,716件(5通貨・各8系列)を集め、そこから取引をn件ずつ無作為に選んで、PFを4,000回出しました。5〜95%の範囲は、30件が0.32〜2.38、100件が0.61〜1.67、300件が0.77〜1.36、1,000件が0.89〜1.22です。中央値は1.00〜1.04で、取引全体のPFは1.05でした。
この範囲は、取引1件ずつを独立に選ぶ計算で、実際には連続する取引が似ている場合もあります。それでも、100件のPFが1.5でも、この条件の偶然の範囲(0.61〜1.67)の中に入ります。今回選ばれた組の取引は、前半が244〜706件ありましたが、後半のPFは0.94〜1.08まで下がりました。取引が多いことは、選んだ設定が後半に続く保証にはなりません。
アドバイス取引が100件だと、偶然だけでPFは0.61〜1.67まで振れるよ。1,000件でも0.89〜1.22の幅があるね。
カーブフィッティングを確かめる検証手順|IS/OOS・ウォークフォワード・MT5

IS/OOS|前半で選び後半で確かめる
設定を選ぶ期間をIS(インサンプル)、選んだあとに成績を確かめる期間をOOS(アウトオブサンプル)と呼びます。今回の前半がIS、後半がOOSです。ISとOOSを分けて、ISで選んだ組がOOSでどうなるかを見ると、過去に合わせすぎていないかを測れます。今回は、前半のPFが1.30だった組が、後半は1.00でした(5通貨の平均)。
MT5のストラテジーテスターには、この分け方がForward(フォワード)の設定としてあります。MetaQuotesのストラテジーテスターの最適化のヘルプによると、期間を2分の1・3分の1・4分の1か、任意の日付で分け、最初の期間で最適化したあと、成績の上位(総当たりは10%、遺伝的アルゴリズムは25%)の結果を、あとの期間で再び試します。2つの期間の成績を見比べて、過剰最適化かどうかを判断します。
ウォークフォワード|期間をずらして繰り返す

ウォークフォワードは、選ぶ期間と確かめる期間を、少しずつずらしながら繰り返す方法です。今回は、2年で1,024組から前半のPFが一番高い組(取引50件以上)を選び、次の半年だけを確かめる作業を、半年ずつずらして17回行いました。確かめた期間は2018年1月〜2026年7月です。半年分の取引をすべてつないだPFは、USD/JPYが1.14、EUR/USDが1.22、GBP/USDが1.02、EUR/JPYが0.84、AUD/JPYが1.10でした。5通貨の平均は1.06です。
選んだ2年のPFは、85窓の平均が1.74(0.93〜3.03)で、確かめた半年のPFが1を超えたのは85窓のうち48窓、中央値は1.08です。同じ手順を並べ替えた系列(通貨ごとに6回、計30回)で行うと、つないだPFは0.71〜1.59、平均1.08で、30回のうち19回が1を超えました。実際の足でも5通貨のうち4通貨が1を超えましたが、順番に意味のない系列でも同じ範囲に入ります。この結果だけでは、選んだ設定に意味があるとは言えません。EUR/JPYの0.84は、同じ通貨の並べ替え6回の範囲(0.97〜1.37)を下回りました。
MT5のテスターに、ウォークフォワードを1回で回す設定はありません。MQL5の記事「Custom Walk Forward optimization in MetaTrader 5」は、MT5でウォークフォワードを自作する方法を解説しています。パラメータ調整の基本はEAのパラメータ最適化の記事、最適化の進め方はEAの最適化ガイドにまとめています。
試した組の数を記録する
今回の測定で、前半のPFを左右したのは、探した組の数でした。4組では1.12、1,024組では1.30です。同じ設定を選んだとしても、4組から選んだ場合と1,024組から選んだ場合では、前半のPFの意味が違います。最適化の結果を見るときは、PFだけでなく、いくつの組を試したか、取引が何件あるか、隣の組の成績がどうかを、あわせて残しておくと確かめやすくなります。バックテストの結果は、バックテストアナライザーで分析できます。
アドバイスウォークフォワードでつないだPFは、5通貨の平均で1.06だったよ。並べ替えた系列も0.71〜1.59の範囲だったから、その範囲の中の結果だね。
要点
・カーブフィッティングは、過去のデータに設定を合わせすぎて、選んだあとの期間で成績が下がること。過剰最適化・過学習とも呼ばれる
・5通貨の1時間足336,913本(2016年1月〜2026年10月)で、移動平均の1,024組から前半のPFで選ぶと、前半は1.30、後半は1.00(5通貨の平均)
・探す組を4組から1,024組に増やすと、前半のPFは1.12から1.30に上がり、後半は0.95〜1.00のまま
・値動きの順番を並べ替えた150系列でも、前半は1.14から1.43に上がり、後半は1.01〜1.02
・前半と後半のPFの順位相関は、5通貨の平均で−0.08。選んだ組の隣の後半のPFは、5通貨のうち3通貨で1未満
・取引が100件でも、偶然でPFは0.61〜1.67まで振れる。1,000件で0.89〜1.22
・ウォークフォワードでつないだPFは0.84〜1.22(平均1.06)で、並べ替えた系列の0.71〜1.59の範囲内
カーブフィッティングのよくある質問
カーブフィッティングとは何ですか?
過去のデータに設定を合わせすぎることです。選んだ期間では成績がよく見えても、別の期間で下がります。
過剰最適化と過学習は同じ意味ですか?
EAの話では、同じ現象を指して使われることが多い言葉です。オーバーフィッティングも同じ現象の英語の呼び方です。
最適化をすると、必ずカーブフィッティングになりますか?
最適化そのものではなく、選んだあとに確かめないことが問題です。今回は、前半で選んだ組の後半のPFが0.94〜1.08に下がりました。期間を分けて確かめれば、下がり方を測れます。
取引回数が多ければ、カーブフィッティングではありませんか?
取引が多くても、後半に続くとは限りません。今回の選ばれた組は前半に244〜706件の取引がありましたが、後半のPFは0.94〜1.08でした。
MT5でカーブフィッティングを確かめる方法はありますか?
ストラテジーテスターのForward(フォワード)設定があります。期間を分け、最初の期間で最適化した結果を、あとの期間で再び試せます。
カーブフィッティングのまとめ
Dukascopy のティックから作った5通貨の1時間足(2016年1月〜2026年10月、336,913本)で、移動平均の1,024組から前半のPFで選ぶと、前半は1.30、後半は1.00でした(5通貨の平均)。探す組を4組から1,024組に増やすと、前半のPFは1.12から1.30に上がり、後半は0.95〜1.00のままでした。値動きの順番を並べ替えた系列でも、前半は1.43まで上がり、後半は1.01です。
選んだ組の隣の後半のPFは、5通貨のうち3通貨で1未満でした。取引が100件では、偶然だけでPFが0.61〜1.67まで振れます。ウォークフォワードでつないだPFは0.84〜1.22で、並べ替えた系列の範囲(0.71〜1.59)に入りました。最適化の結果を見るときは、期間を分けて確かめ、試した組の数と取引件数もあわせて確認してください。この測定はコストを引いていない1つの手法の結果で、ほかの手法や時間足にそのまま当てはまるとは限りません。
この記事はFXの手法の情報提供で、特定の取引をすすめるものではありません。FXには価格変動のリスクがあり、元本を超える損失が出ることもあります。取引は自己責任で、リスク管理を自分で決めて行ってください。
⚠ リスクに関する注意事項
本記事は情報提供を目的としており、特定の金融商品の売買を推奨するものではありません。FX取引はレバレッジ取引の特性上、預託した証拠金以上の損失が生じる可能性があります。取引の際は、ご自身の判断と責任において行ってください。詳しくは特定商取引法に基づく表記をご確認ください。













