「バイナリーオプションで稼げる」という話を、SNSや広告で見たことがある方は多いと思います。
先に結論だけ書いておきますね。
バイナリーオプションは、続ければ続けるほど資金が減る仕組みになっています。
これは「負けている人が下手だから」ではなく、ルールそのものから数学的に導ける結論です。
この記事では、期待値の計算とPythonによるシミュレーションで、その理由を確かめていきます。
実際に動かした結果のグラフも載せているので、数式が苦手な方は図だけ追ってもらっても大丈夫です。
それでは、実際に手を動かして確かめていきましょう!
そもそも為替の短期予測はできるのか
バイナリーオプションは「数分後に価格が上がるか下がるか」を当てる取引です。
まず、この予測がどれくらい難しいかを考えてみましょう。
機械学習の言葉で言えば、為替の短期変動は説明変数が多すぎる問題です。
各国の金利、経済指標、要人の発言、地政学的リスク、他の参加者の注文状況……変動要因はほぼ無限にあり、しかもそれらは刻々と変わります。
過去のチャートというサンプルは大量にありますが、そこから数分後を当てる関数を学習できるかというと、話は別です。
もし本当に短期の値動きを当てる方法があったなら、それを見つけた人はSNSで教材を売らず、黙って資金を投じているはずです。
そこで、予測はできない、勝率はおよそ50%という前提で話を進めます。
それでは、ここからが本題です。
期待値を計算する
1回の取引で1万円を賭けるとします。
ペイアウト率を1.8倍とすると、勝てば8,000円の利益、負ければ1万円の損失です。
- $p$ : 1回の取引で勝つ確率(勝率)
- $E$ : 1回あたりの期待値。賭け金を1としたときに、平均していくら増減するか
- ペイアウト率1.8 : 勝ったときに賭け金の1.8倍が戻ってくる(=利益は賭け金の0.8倍)
勝率を \(p\) とすると、1回あたりの期待値は次のようになります。
$$E = p \times 0.8 – (1-p) \times 1.0$$
勝率50%を代入してみましょう。
$$E = 0.5 \times 0.8 – 0.5 \times 1.0 = -0.1$$
1回取引するたびに、賭け金の10%が平均的に失われます。
1万円を賭けるたびに1,000円ずつ溶けていく計算です。
では、損をしないためにはどれくらいの勝率が必要でしょうか。\(E > 0\) を解くと、
$$p > \frac{1}{1.8} \approx 0.556$$
つまり勝率55.6%を超え続けなければ、プラスにはなりません。
コイン投げで55.6%を出し続けるようなもので、しかもこの数字は業者がペイアウト率を決める時点で、業者に有利になるよう設定されています。
~coffee break~
期待値とは? 1回の勝負で平均するといくら増減するか、という値のこと。サイコロの出目の期待値が3.5であるように、実際には出ない値になることもある。大事なのは、回数を重ねるほど結果が期待値に近づいていくということ。だからこそ、期待値がマイナスのゲームを続けるのは危険なのです。
1000人にシミュレーションさせてみた
「今日は負けたけれど、続けていればいつか取り返せる」
これは誤解です。
大数の法則が言っているのは、試行回数を増やすほど、結果は期待値に近づくということです。
期待値がプラスのゲームなら、続けるほど勝ちが確定していきます。
しかし期待値がマイナスのゲームでは、逆に続けるほど負けが確定していきます。
言葉だけでは納得しづらいので、実際に手を動かしてみましょう。
初期資金50万円の人が1000人いて、それぞれ1回1万円で500回取引する、という設定です。
import numpy as np
import matplotlib.pyplot as plt
rng = np.random.default_rng(0)
n_people = 1000 # 1000人が
n_trades = 500 # 500回ずつ取引する
bet = 10000 # 1回1万円
payout = 1.8 # ペイアウト率
start = 500000 # 初期資金50万円
win = rng.random((n_people, n_trades)) < 0.5
profit = np.where(win, bet * (payout - 1), -bet)
balance = start + np.cumsum(profit, axis=1)
fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(balance[:50].T, lw=0.7, alpha=0.45)
ax.plot(balance.mean(axis=0), color="k", lw=2.5, label="mean of 1000 people")
ax.axhline(0, color="r", ls="--", lw=1.5, label="ruin")
ax.set_xlabel("number of trades")
ax.set_ylabel("balance (JPY)")
ax.legend()
ax.grid(alpha=.3)
plt.show()
結果がこちらです。細い線が個人の資金推移、太い黒線が1000人の平均です。

平均は、きれいな右下がりの直線になります。
1回あたり1,000円ずつ、500回で50万円。初期資金がちょうど消える計算どおりの動きです。
注目してほしいのは、個々の線の振る舞いです。
途中で資金を大きく増やしている人が確かにいます。100回目あたりで60万円を超えている線もありますね。
短期的には勝つ人が必ず出るので、その人は「自分の手法は正しい」と信じてしまいます。
そして、その成功体験だけがSNSで拡散されます。負けた人は黙って退場するので、表には出てきません。
500回後、何人が勝っていたか
最終的な資金の分布を見てみましょう。
final = balance[:, -1]
fig, ax = plt.subplots(figsize=(10, 5))
ax.hist(final, bins=60, color="#4477aa", alpha=.85)
ax.axvline(start, color="g", ls="--", lw=2, label="start")
ax.axvline(final.mean(), color="k", lw=2, label="mean")
ax.axvline(0, color="r", ls="--", lw=2, label="zero")
ax.set_xlabel("balance after 500 trades (JPY)")
ax.set_ylabel("number of people")
ax.legend()
plt.show()
print("資金が残っている人:", (final > 0).mean())
print("初期資金を上回った人:", (final > start).mean())

出力された数字はこちらです。
- 資金が残っている人 : 47.9%
- 初期資金50万円を上回った人 : わずか0.8% (1000人中8人)
半数近くが「まだ資金が残っている」状態なので、一見するとそこまで悲惨に見えないかもしれません。
しかし増やせた人は1000人に8人です。残りの992人は、程度の差はあれ資産を減らしています。
しかもこのシミュレーションは、資金がマイナスになっても取引を続けられるという現実にはありえない設定です。
実際には途中で資金が尽きた時点で終了なので、この数字はまだ現実よりかなり楽観的です。
なお、グラフの描き方についてはこちらの記事で解説しています。
マーチンゲール法はなぜ破綻するか
「負けたら倍賭けすれば、1回勝つだけで取り返せる」
いわゆるマーチンゲール法です。理屈としては正しく見えます。
しかし、必要な資金は連敗数 \(n\) に対して \(2^n\) で増えます。
n = np.arange(1, 16)
need = bet * (2 ** n)
fig, ax = plt.subplots(figsize=(10, 5))
ax.plot(n, need, "o-", color="#cc3311")
ax.set_yscale("log")
ax.set_xlabel("consecutive losses")
ax.set_ylabel("required bet (JPY, log scale)")
ax.grid(alpha=.3, which="both")
plt.show()

縦軸が対数なのに直線になっている、つまり指数関数的に増えているということです。
- 5連敗 : 32万円
- 10連敗 : 1,024万円
- 15連敗 : 3億2,768万円
勝率50%なら10連敗が起きる確率は約0.1%ですが、取引回数を重ねればいずれ必ず遭遇します。
そして、そのとき必要な資金は手元にありません。業者の上限額にも引っかかります。
マーチンゲール法は「小さな勝ちを何度も得るかわりに、いつか一度だけ全額を失う」手法です。
期待値は変わりません。損失の形を、多くの小さな勝ちと一度の破産に組み替えているだけです。
それでも「勝っている人」がいる理由
誤解のないように書いておくと、一発勝負で勝つことは十分にあり得ます。
勝率50%なのですから当然です。
問題は、それを「実力」や「手法の成果」と呼べるかどうかです。
1,000人が同じことをすれば、10連勝する人が1人くらいは出ます。その人は自分を天才だと思うでしょう。
そして、本当に安定して儲けている人がいるとすれば、それは取引ではなく教材や商材を売っている側です。
こちらは期待値がはっきりプラスのビジネスです。買う人がいる限り損をしません。
法律面のリスクも大きい
広告でよく見る海外のバイナリーオプション業者の多くは、金融庁の登録を受けていません。
登録のない業者との取引には、次のようなリスクがあります。
- 出金しようとすると応じてもらえない
- トラブルが起きても国内の制度で救済されない
- 業者が突然消えても、どうしようもない
国民生活センターにも、出金できないという相談が継続的に寄せられています。
取引する場合は、金融庁の登録業者一覧で必ず確認してください。
まとめ
- 短期の為替予測は、変動要因が多すぎて現実的に困難
- 勝率50%・ペイアウト1.8倍なら、1回ごとに賭け金の10%が失われる
- プラスにするには勝率55.6%以上が必要で、その設定は業者が決めている
- 1000人でシミュレーションすると、500回後に初期資金を上回るのは0.8%だけ
- マーチンゲール法は期待値を変えず、破産の形を変えるだけ
- 海外の無登録業者には出金トラブルのリスクがある
どうしてもやるのであれば、宝くじや競馬と同じ、負けても構わない金額での娯楽として付き合うのが正しい距離感だと思います。
資産を増やす手段として考えるのであれば、期待値がプラスの側に立つべきです。
せっかく時間とお金を使うなら、勝てる側に回りたいですよね!
同じPythonを使うなら、株価データを分析するほうがずっと健全で面白いです。そちらの入門記事も書いたので、よければ読んでみてください。
この記事で使った「回数を重ねるほど期待値に近づく」という性質そのものについては、こちらで詳しく書いています。
大数の法則の主張 標本平均の収束の速さ ($\sigma/\sqrt{n}$) 表と裏の回数の差が $\sqrt{n}$ で増大し、割合が収束する理由 ギャンブラーの誤謬 上記を導くための期待値・分散・標[…]
※ 本記事は数学的な考察であり、特定の金融商品の取引を推奨・否定して投資判断を助言するものではありません。取引はご自身の責任で行ってください。


コメントを書く