「スキャルのつもり」を履歴で検算する|FXの保有時間を集計して、スワップが付き始める「崖」を自前計算した

本記事はプロモーションを含みます。掲載している海外FX業者のリンクから口座開設等が行われた場合、当サイトが提携先企業から成果報酬を受け取ることがあります。

「自分はスキャルピングをやっている」と思っている人、けっこう多いと思うんですよね。私もずっとそう思っていました。数分で入って数分で抜ける、と。

でも、取引履歴を引っ張り出して1件ずつ保有時間を計算してみたら、ぜんぜん違ったんですよ。これが地味にショックだったんですよね。数分で終わっている取引は確かにあるんですけど、それと同じくらい「気づいたら数時間握っていた」取引が混ざっていて、真ん中の値は体感よりずっと長かったんです。

これ、気分の問題じゃなくて実害があるんですよね。保有時間はそのまま「スワップポイントを払うかどうか」に直結するからです。今回は、自分の取引履歴から保有時間を集計する手順と、出てきた数字を「スワップ発生ラインとの距離」として読む方法をまとめます。

そもそも、体感の保有時間はなぜ当てにならないのか

理由はシンプルで、記憶に残るのは長く持った取引のほうだからです。

サッと入ってサッと抜けた取引って、正直あんまり覚えてないじゃないですか。一方で「含み損を抱えて2時間ひたすら祈っていた」みたいな取引は、嫌でも記憶に焼き付くんですよね。だから体感は長いほうに引っ張られる……かと思いきや、実際は逆のパターンもよくあるんですよね。「自分はスキャルパーだ」という自己イメージが先にあると、そこからはみ出した取引を無意識に例外扱いしてしまうんですよ。

どっちに転ぶにせよ、体感は当てになりません。自分の手法が実際には何分足のトレードなのかは、履歴を数えるまで分からないと思っておいたほうがいいです。

保有時間は、履歴から秒単位で出せる

2枚の取引履歴の表を突き合わせて、同じポジションの建玉と決済を線でつないでいる様子

やることは1行で言えてしまうんですけど、「同じポジションの建玉(IN)と決済(OUT)の時刻を引き算する」だけなんですよね。

MT5の場合、約定の1件1件(MQL5の用語ではdeal)に以下のプロパティが付いています。MQL5公式リファレンスの定義を見ながら整理すると、こうなります。

フィールド 公式の説明 使い道
DEAL_ENTRY Deal entry – entry in, entry out, reverse その約定が建玉か決済かの区別
DEAL_TIME_MSC The time of a deal execution in milliseconds since 01.01.1970 ミリ秒単位の約定時刻
DEAL_POSITION_ID Each position has a unique identifier that is assigned to all deals executed for the symbol during the entire lifetime of the position. INとOUTを結ぶ鍵

手順はこれだけです。

  1. MT5の「口座履歴」タブを右クリックして、期間を指定してレポートを保存する(XLSX形式が扱いやすいです)
  2. DEAL_POSITION_ID(レポート上では「ポジション」列)でグループ化する
  3. 各グループの中で、DEAL_ENTRY が IN の時刻と OUT の時刻を取る
  4. 引き算する

表計算ソフトならピボットテーブル一発で終わります。作業自体は難しくないんですよ。ただ、ここで踏むと答えが丸ごと変わる落とし穴が4つあるので、そっちのほうが本題です。

落とし穴その1: ポジション番号で突き合わせてはいけない

これが一番厄介で、しかも気づきにくいやつなんですよね。正直、私もしばらく間違えたまま集計していました。

MT5にはポジションを指す値が2つあります。POSITION_TICKET と POSITION_IDENTIFIER です。普段は一致するので同じものだと思いがちなんですよ。ところが、公式リファレンスの POSITION_TICKET の説明にこう書いてあるんですよ。

It usually matches the ticket of an order used to open the position except when the ticket is changed as a result of service operations on the server, for example, when charging swaps with position re-opening.

訳すと「スワップを徴収する際にポジションを再オープンするといったサーバー側の処理で、チケット番号が変わることがある」ということです。

つまり、スワップの付け方として「いったんポジションを閉じて同じ値段で開き直す」方式を採っている業者だと、チケット番号で突き合わせた瞬間、日をまたいだポジションが毎日ぶつ切りになります。3日持ったポジションが「1日のポジション×3件」に化けるわけです。保有時間の分布は当然めちゃくちゃになりますし、よりによって長く持った取引だけが短く見える方向に壊れるので、気づかないまま「うちの手法は短期だった」と誤読してしまう。

対策自体は簡単なんですよ。必ず DEAL_POSITION_ID(= POSITION_IDENTIFIER)側で突き合わせること。それだけです。こちらは公式の説明にも「It does not change throughout its life cycle」と明記されています。

落とし穴その2〜4

注意

② 分割決済…1つのポジションを2回3回に分けて閉じると、OUTが複数行になります。「最後のOUTまで」を保有時間にするか、数量で加重平均するかを先に決めておかないと、集計するたびに答えが変わります。
③ ドテンと両建て決済…DEAL_ENTRY には IN / OUT のほかに INOUT(ドテン)と OUT_BY(反対ポジションによる決済)があります。INとOUTだけを拾う素朴な集計だと、この2つが行方不明になります。
④ 時刻はサーバー時間…公式リファレンスにも「for the specified period of server time」と書かれているとおり、履歴の時刻は日本時間ではありません。保有時間(引き算)を出すだけなら影響しませんが、「何時にエントリーしているか」を見る瞬間に効いてきます。

平均じゃなくて、中央値を見る

集計できたら、まず中央値を出してください。平均値じゃなくてです。ここ、地味に大事なんですよ。

というのも、保有時間の分布って必ず右に長い尻尾を引くんですよね。ほとんどが数分〜数十分なのに、塩漬けにした1本だけが数日というパターン。この1本が平均を軽く数倍に押し上げてしまうので、平均値は「自分の普段」をまったく代表しません。

見るべき数字は3つで十分だと思います。中央値(普段の自分)、上位10%の値(悪化したときの自分)、そして平均と中央値の比です。最後のやつが地味に効くんですよ。比が2倍を超えているなら、それは手法の性質というより「損切りできずに伸びた取引が一定数ある」というサインなので。

保有時間が分かると、スワップが付く確率を計算できる

夜明けの薄明かりが差し込む部屋で、チャートを表示したままのモニターと壁掛け時計

ここからが本題というか、保有時間を数える一番の実益なんですけど、スワップとの関係がはっきりするのが大きいんですよね。

スワップポイントは「ロールオーバーの瞬間にポジションを持っていたかどうか」だけで決まります。1分前に閉じれば発生しないし、1分またげば丸1日分が付く。つまり保有時間そのものではなく、特定の時刻をまたいだかどうかの勝負なんですよね。

そのロールオーバー時刻なんですけど、多くの業者はサーバー時間の0時に置いているんですよね。そしてサーバー時間は「ニューヨーククローズ17時 = サーバー0時」になるよう設定されているのが一般的で、複数の情報源で確認した限りでは、日本時間だと夏時間中は朝6時、冬時間中は朝7時に当たります。

POINT

ここで1つ、カレンダーを見ていないと必ず間違えるポイントがあります。この切替は欧州ではなく米国の夏時間に連動します。IANAタイムゾーンデータベースの原文ルールを引くと、米国は「11月第1日曜」、欧州は「10月最終日曜」。これを2026年に当てはめると欧州は10/25、米国は11/1です。
つまり10/25〜10/31の1週間は、欧州が冬時間に入ってもロールオーバーは日本時間6時のまま動きません。「ヨーロッパが切り替わったから7時だろう」で計算すると、この週だけ1時間ズレます。

で、ここからが自前計算です。「エントリー時刻がいつも同じ時間帯に偏っている」という前提を置くと、保有時間からロールオーバーをまたぐ確率が解析的に出せます。危険区間は「ロールオーバー時刻の H 分前からロールオーバー時刻まで」で、そこに自分のエントリー時間帯がどれだけ重なるか、という計算です。

ロールオーバーを日本時間6時(=現在)として計算した表がこちらです。

保有時間 東京中心
(9〜15時)
欧州中心
(16〜24時)
NY中心
(21〜翌3時)
24時間一様
(参考)
30分 0% 0% 0% 2.1%
1時間 0% 0% 0% 4.2%
2時間 0% 0% 0% 8.3%
4時間 0% 0% 16.7% 16.7%
6時間 0% 0% 50.0% 25.0%
8時間 0% 25.0% 83.3% 33.3%
12時間 0% 75.0% 100% 50.0%
18時間 50.0% 100% 100% 75.0%

この表、わりと衝撃的じゃないですか?

よく見る説明だと「保有時間が長いほどスワップが付きやすい」で終わるんですけど、実際は比例しないんですよ。右端の「24時間一様」の列だけが、きれいに保有時間に比例しています。これは「1日中ランダムにエントリーしている人」の数字なので、ほとんどの個人トレーダーには当てはまりません。

現実に近いのは左の3列のほうで、こっちはある保有時間を境に、確率がほぼゼロから一気に立ち上がる「崖」になっています。日本時間の夜(NY時間)に入る人なら、4時間までは16.7%なのに、6時間で50%、8時間で83.3%。たった4時間延びただけで、スワップは「たまに付くもの」から「ほぼ毎回付くもの」に変わるんですよね。

逆に、東京時間の日中にしかエントリーしない人は、18時間持たない限りスワップとは無縁です。同じ「保有4時間」でも、エントリーが昼か夜かで意味がまったく違う。だから保有時間を集計するときは、時刻のヒストグラムも一緒に作っておくといいと思います。

POINT

私が自分の履歴でこれをやったとき、一番こたえたのは中央値の長さそのものじゃなくて、「崖のすぐ手前に自分が立っていた」ことでした。中央値は崖の左側なのに、上位10%はしっかり右側。つまり普段はコストゼロで済んでいるけれど、調子が悪くて持ち越した日にだけ固定コストが乗る構造になっていたんですよね。
対策として、損切りの基準を値幅だけじゃなく時間でも切るようにしてみたんですけど、個人的にはこれがけっこう効いた気がしています。少なくとも「気づいたら朝だった」は無くなりました。

この集計を踏まえて、業者をどう見るか

ちなみに、保有時間の中央値が出ると業者選びの軸が自動的に決まるのも、地味にいいところなんですよね。

中央値が崖のはるか左側(日中トレードで数十分、など)なら、スワップの条件はほぼ無関係です。見るべきはスプレッドと取引手数料で、1回あたりの往復コストがそのまま成績に効いてくるんですよ。逆に中央値が崖の右側なら、スプレッドを少し削るよりスワップの絶対値と、スワップフリー口座の有無を見たほうが効きます。

どちらにせよ、自分の数字が先で、業者比較は後なんですよね。他人の「このブローカーはスキャル向き」という評価は、その人の保有時間分布の上に乗った話でしかないので。同じ口座でも、崖の左に立っている人と右に立っている人では最適解が逆になります。

注意

本記事の確率計算は「エントリー時刻が指定した時間帯に一様分布している」という単純化のもとでの値です。実際のエントリーは指標発表時刻などに偏るので、あくまで目安として扱ってください。また、ロールオーバー時刻・サーバー時間・スワップの徴収方式(再オープン方式かどうか)は業者ごとに異なります。最新の仕様は必ず各社の公式サイトでご確認ください。

FX取引はレバレッジを用いた取引であり、預けた資金(元本)を上回る損失が生じる可能性があります。本記事は情報提供を目的としたものであり、投資を勧誘するものではありません。取引を行う際は自己責任・余裕資金の範囲で行い、各社公式サイトで最新のリスク説明書・規約を必ずご確認ください。

まとめ

  • 自分の保有時間は体感では分からない。履歴の IN と OUT を引き算すれば秒単位で出る
  • 突き合わせは必ず DEAL_POSITION_ID で。チケット番号だと、スワップ徴収でポジションを再オープンする業者で日をまたいだ取引がぶつ切りになる
  • 見るのは平均ではなく中央値・上位10%・平均/中央値の比の3つ
  • ロールオーバーは日本時間6時(米冬時間中は7時)。切替は米国の夏時間に連動するので、2026年は11/1。10/25〜31は6時のまま
  • スワップが付く確率は保有時間に比例しない。エントリー時間帯ごとに崖がある。自分がその崖のどちら側にいるかで、見るべき業者の条件が変わる

表計算ソフトで30分あれば終わる作業なので、一度やってみる価値はあると思うんですよね。たぶん、思っているのと違う数字が出てきます。