取引履歴から「スワップと手数料で実際にいくら払ったか」を自分で集計する手順|損益の何%が固定コストに消えたのか

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

月末に口座残高を見て「あれ、思ってたより増えてないな」って思ったこと、ありませんか。私はあるんですよね。

トレード自体は悪くなかったはずなんですよ。勝ちもそれなりにあって、負けも想定内。なのに残高の伸びが鈍い。犯人は分かりきってるんですけどね、スワップと手数料です。

ただ問題は「分かってる」ことじゃないんですよね。それが自分の損益の何%を持っていったのかを、ほとんどの人が一度も数えていないことなんですよ。

というわけで今回は、MT5の取引履歴からグロス損益・手数料・スワップを分離して、固定コストが利益の何割を食ったかを自分で出す手順をまとめます。統計の話は一切出てきません。合計と比率を出すだけです。

そもそも、損益は1つの数字じゃない

ここが出発点なんですけど、MT5の約定(deal)って損益とコストを別々のフィールドで持ってるんですよ。1個の数字にまとまってるわけじゃないんです。

MQL5の公式リファレンス(Deal Properties)を見ると、お金に関係するフィールドは4つあります。

4つに分かれた財布のイメージ。損益・手数料・スワップ・feeがそれぞれ別の山になっている様子
「損益」に見えている数字は、実は4つの別々の山を足したもの
フィールド 公式の説明(原文) 中身
DEAL_PROFIT Deal profit グロス損益。コストを引く前の為替差損益
DEAL_COMMISSION Deal commission 取引手数料
DEAL_SWAP Cumulative swap on close スワップ。決済時に累計で乗る
DEAL_FEE Fee for making a deal charged immediately after performing a deal 約定直後に引かれる手数料。コミッションとは別枠

つまり自分のネット損益はこうです。

ネット損益 = DEAL_PROFIT + DEAL_COMMISSION + DEAL_SWAP + DEAL_FEE

足し算なのが気持ち悪いと思うんですけど、コストはマイナスの値で入ってくるので足せば引かれます。ここで符号を勝手に反転させると二重に引いちゃうので注意なんですよね。

POINT

DEAL_FEEの存在を知らない人、けっこう多いと思うんですよ。私も最初はコミッションと同じものだと思い込んでて、集計スクリプトから丸ごと抜け落ちてました。公式の説明が「約定の直後に課される手数料」でDEAL_COMMISSIONとは明確に別フィールドなので、両方足さないと実額が合いません。

落とし穴その1: スワップは「決済した日」にまとめて乗る

これが一番ハマりやすいところだと思います。

公式のDEAL_SWAPの説明、もう一度よく見てほしいんですけど「Cumulative swap on close」なんですよ。日ごとに1行ずつ記録されるんじゃなくて、決済したときに保有期間ぶんの合計が1発で乗るってことなんです。

日本語のMT5解説でも決済履歴の列は「実現スワップ(決済時に実現したスワップ金額)」という書き方になっていて、公式の記述と一致しています。複数の情報源で確認した限りでは、この挙動は共通と見ていいと思います。

で、何が起きるかというと月次集計がズレるんですよね。9月20日に建てて10月5日に決済したなら、9月分のスワップも全部10月5日の行に乗ります。つまり「9月のコスト」を決済日基準で出すと、9月に発生していたぶんが9月の集計から消えるんですよ。

スキャルやデイトレだけなら気づかないんですけど、週をまたぐスタイルだと普通に起きます。日割りで按分したければ、建玉日と決済日から自分で割り戻すしかないんですよね。

落とし穴その2: 売買じゃないdealにもコストが入っている

ここ、私が実際に取りこぼしたところなんですよね。

「履歴を回してコミッションを合計すればいいんでしょ」と思って、BUYとSELLのdealだけをループで回してたんですよ。でも公式のENUM_DEAL_TYPEを見たら、売買以外のdeal種別がずらっと並んでるんです。

  • DEAL_TYPE_CHARGE — Additional charge(追加の課金)
  • DEAL_TYPE_COMMISSION — Additional commission
  • DEAL_TYPE_COMMISSION_DAILY / _MONTHLY — 日次・月次でまとめて請求されるコミッション
  • DEAL_TYPE_COMMISSION_AGENT_DAILY / _MONTHLY — エージェント経由ぶん
  • DEAL_TYPE_INTEREST — Interest rate
  • DEAL_TAX — Tax charges

つまりコミッションが「売買dealの中」ではなく「独立した1行」として立つパターンがあるんですよ。日次や月次でまとめて引く方式の口座だと、まさにこれです。

なので集計は全dealを回して種別で振り分けるのが正解です。売買だけに絞ると、口座の方式次第では固定コストの大半を見落とすので。これに気づいたときは正直ちょっと背筋が寒くなったんですよね。

注意

どのdeal種別が実際に出てくるかは口座タイプと業者の運用で変わります。ここで挙げたのはあくまで「MQL5の仕様上ありうる種別」の一覧です。自分の口座に何が立っているかは、必ず自分の履歴をダンプして確かめてください。最新の仕様は公式リファレンスで要確認です。

落とし穴その3: IN と OUT を混ぜない

もう1つ、DEAL_ENTRYという区分があります。公式では4種類です。

  • DEAL_ENTRY_IN — Entry in(新規)
  • DEAL_ENTRY_OUT — Entry out(決済)
  • DEAL_ENTRY_INOUT — Reverse(ドテン)
  • DEAL_ENTRY_OUT_BY — Close a position by an opposite one(反対ポジションでの決済)

損益とスワップが乗るのは基本的にOUT側で、IN側の損益はほぼゼロなんですよ。なので「約定行の数=トレード回数」で割ると倍くらいの数字が出ちゃいます。コスト比率の分母がブレるので地味に効くんですよね。

私はOUT・INOUT・OUT_BYを合わせて「決済回数」として扱ってます。公式も「各ポジションは1つ以上のdealの合計結果である」と書いているので、ポジション単位で見たいならDEAL_POSITION_IDでまとめるのが素直ですね。

じゃあ、何を計算すればいいのか

フィールドの話が長くなっちゃったんですけど、ここからが本題です。出すべき数字は3つだけでいいと思ってます。

① コスト比率 — グロスの何%が消えたか

コスト比率 = 固定コスト合計 ÷ グロス利益合計

固定コスト合計はCOMMISSION + SWAP + FEEの絶対値、グロス利益合計はDEAL_PROFITのプラスぶんの合計です。

この数字、100%を超えることがあるんですよね。超えてたら「相場では勝ってるのに、コストで負けている」という状態なんですよ。ちょっと残酷なんですけど、一度は見ておく価値があると思います。

② 損益分岐グロス — 1回あたり最低いくら取る必要があるか

損益分岐グロス = 固定コスト合計 ÷ 決済回数

「1トレードあたり、最低これだけグロスで取らないとゼロにすらならない」という下駄の高さなんですよね。自分の平均利幅と並べてみると、だいぶ気分が変わります。

③ 必要勝率の押し上げ幅 — ここが一番効く

で、個人的に一番インパクトがあったのがこれなんですよ。往復コストをpips換算して、それが損益分岐に必要な勝率をどれだけ押し上げているかを出すやつです。

勝ちの平均利幅をW、負けの平均損失をL、往復の固定コストをC(全部pips)とすると、期待値ゼロになる勝率pはこの式で出ます。

p = (L + C) ÷ (W + L)

導出は簡単で、p(W − C) − (1 − p)(L + C) = 0 を解くだけです。面白いのが分母が (W + L) のまま変わらないところなんですよ。コストは勝ちから引かれて負けに足されるので、分子だけがCぶん持ち上がるんです。

この式で早見表を作ってみました。WとLが同じ(リスクリワード1:1)と仮定した場合です。

平均利幅 コスト0 往復0.5pips 往復1.0pips 往復1.5pips 往復2.0pips 往復3.0pips
3pips 50.0% 58.3% 66.7% 75.0% 83.3% 100.0%
5pips 50.0% 55.0% 60.0% 65.0% 70.0% 80.0%
10pips 50.0% 52.5% 55.0% 57.5% 60.0% 65.0%
20pips 50.0% 51.2% 52.5% 53.8% 55.0% 57.5%
50pips 50.0% 50.5% 51.0% 51.5% 52.0% 53.0%

見方はシンプルで、自分の平均利幅の行を見て、自分の往復コストの列と交差するところが「トントンに必要な勝率」です。

3pips狙いのスキャルで往復1.0pipsだと、必要勝率が50%から66.7%に跳ね上がるんですよね。で、往復3.0pipsまでいくと100%、つまり全勝してやっとトントンです。原理的に成立しません。

逆に利幅50pipsの行は、往復3.0pipsでも53.0%にしかなりません。同じコストでも、利幅が小さいほど相対的な重さが跳ね上がるという当たり前のことが、数字で見るとかなり生々しいです。

保有日数を足すと、スイングも他人事じゃなくなる

「利幅が大きければコストは誤差」って話で終わりそうなんですけど、そうでもないんですよ。保有日数ぶんのスワップが積み上がるからです。

さっきの表は往復コストが一定でしたけど、マイナススワップのポジションを持ち越すとCは日数に比例して膨らみます。利幅50pips狙い、スプレッド+手数料で1.0pipsとして計算してみました。

1日あたりスワップ 1日保有 3日保有 7日保有 14日保有 30日保有
0.3pips C=1.3 / 51.3% C=1.9 / 51.9% C=3.1 / 53.1% C=5.2 / 55.2% C=10.0 / 60.0%
0.6pips C=1.6 / 51.6% C=2.8 / 52.8% C=5.2 / 55.2% C=9.4 / 59.4% C=19.0 / 69.0%
1.0pips C=2.0 / 52.0% C=4.0 / 54.0% C=8.0 / 58.0% C=15.0 / 65.0% C=31.0 / 81.0%

1日0.6pipsのマイナススワップを30日持つと、必要勝率が50%から69.0%になります。1.0pipsなら81.0%です。

これ、ポジションを持った瞬間に決まる話じゃないんですよね。持ち続けるほど勝手に条件が悪くなっていくんですよ。「もう少し待てば戻るかも」で塩漬けにしてるとき、裏でこの表の右側に移動し続けてるわけです。

POINT

自分で集計してみて一番ハッとしたのが、「コストが高い」より「コストに対して利幅が小さい」のほうが問題だったという点なんですよ。往復コストの数字だけ見て一喜一憂してたんですけど、分母にあたる平均利幅を一緒に見ないと意味がなかったんですよね。同じ往復1.0pipsでも、利幅3pipsなら致命傷で、利幅20pipsならほぼ誤差なので。コストは絶対額じゃなくて利幅との比で見る、これが今回の一番の収穫でした。

実際にやるときの手順

難しいことはしてなくて、流れはこれだけです。

  1. 全dealをダンプする。MT5のスクリプトでHistorySelect()してからHistoryDealsTotal()ぶん回し、チケット・ポジションID・時刻・銘柄・種別・entry・reason・数量・価格・PROFIT・COMMISSION・SWAP・FEEをCSVに吐く
  2. 種別で振り分ける。売買のdealと、CHARGE/COMMISSION_*/INTEREST系のdealを分けて、両方のコストを足す
  3. 決済回数を数える。OUT / INOUT / OUT_BY を対象にする
  4. 3つの数字を出す。コスト比率・損益分岐グロス・必要勝率の押し上げ幅

手で集計するなら、取引履歴をHTMLかExcelでエクスポートしてスプレッドシートに貼るだけでも①と②は出せます。表示上の列名はビルドによって変わることがあるので、そこは自分の環境で確かめてくださいね。

注意

pips換算するときはdigitsに気をつけてください。3桁か5桁の銘柄は 1pip = point × 10、2桁・4桁ならそのままです。ここを間違えると数字が丸ごと10倍ズレます。私は一度やらかして、やたらコストが高い口座だと勘違いしたことがあるんですよね。

この集計を踏まえて業者を見るなら

ここまでの話って、結局「自分の利幅に対してコストが何%か」に収束するんですよね。だから業者選びも、スペック表を眺めるんじゃなくて自分のスタイルに当てはめて比率で見るのが筋だと思います。

利幅を小さく取るスキャル寄りなら往復コストの絶対値が効くので、スプレッドと手数料の合計が小さい口座タイプを選ぶ意味が大きいです。表の3pips・5pipsの行を見れば、0.5pipsの差が必要勝率を何%動かすか一目で分かりますよね。逆に利幅を大きく取るスタイルなら、マイナススワップと保有日数のほうが効くので、手数料の安さより持ち越しコストの条件を先に見たほうがいいと思うんですよ。

低スプレッド系の口座タイプを持っている業者という意味では、スキャルピング層の選択肢としてExnessの名前はよく挙がります。ただし口座タイプごとの具体的な数値はここでは書きません。条件は改定されますし、公式以外の転記を信じて計算すると、せっかく自分で集計した数字が台無しになるので。スプレッド・手数料・スワップの最新条件は必ず公式サイトで直接確認してください。その上で、この記事の表に自分の数字を入れて比率で判断するのがいいと思います。

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

まとめ

長くなったので、要点だけ並べておきますね。

  • MT5の約定は損益・コミッション・スワップ・fee の4つのフィールドを別々に持っている。DEAL_FEEは見落としやすい
  • スワップは公式仕様で「Cumulative swap on close」。決済日にまとめて乗るので、月次集計は決済日基準になる
  • 売買以外のdeal(CHARGE / COMMISSION_DAILY / INTEREST など)にもコストが入る。全dealを回さないと取りこぼす
  • 出すのは3つ。コスト比率・損益分岐グロス・必要勝率の押し上げ幅
  • 必要勝率は p = (L + C) ÷ (W + L)。分母は変わらず、分子だけがコストぶん持ち上がる
  • コストは絶対額ではなく利幅との比で見る。利幅3pipsなら往復1.0pipsで必要勝率66.7%、利幅50pipsなら51.0%にしかならない

一度やってみると、自分がどの改善をすべきかが見えてくると思います。「コストの安い口座を探す」のか「利幅の取り方を変える」のか「保有日数を短くする」のか。打ち手が全然違うんですけど、数字を出さないとどれが効くか分からないんですよね。

手を動かすのは正直ちょっと面倒です。でも一度でも自分の口座で何が起きてるかを数字で押さえておくと、その後の判断がだいぶ楽になる気がします。個人的にはやっておいて損はない作業だと思ってます。