シェア:

ビットコインの売買タイミングを見つける方法!「SMAゴールデンクロス」を学んでみよう

この記事では、ビットコインの取引で使われる「SMAゴールデンクロス」という、売ったり買ったりするタイミングを見つける方法を紹介します。2025年のある期間(約4ヶ月間)のデータを使って、この方法がどんな結果になったのか、中学生にもわかるようにやさしく説明しますね。

取引数
35
勝率
25.71%
最終リターン
-11.16%
最大DD
21.09%

導入と前提条件

この記事では、ビットコインの取引で使われる「SMAゴールデンクロス」という、売ったり買ったりするタイミングを見つける方法を紹介します。2025年のある期間(約4ヶ月間)のデータを使って、この方法がどんな結果になったのか、中学生にもわかるようにやさしく説明しますね。

【検証】戦略のバックテスト概要

  • 戦略名: SMA Golden Cross を使用したトレンド追従戦略
  • 対象銘柄: BTC/USDT
  • 時間足: 1h
  • 期間: 2025-04-28〜2025-08-26(119日間)
  • 初期資金: $10,000
  • 手数料・スリッページ: 0.1% / 0.1%
  • 取引所: binance

SMA Golden Cross の理論的背景

この方法の基本的な考え方は、「値段の動きの『流れ』に乗る」という、とてもシンプルなものです。ビットコインなどの値段は、急に上がったり下がったりするだけでなく、しばらく同じ方向へ進む「勢い」があることが多いです。短い期間の平均線は最近の値段の動きをすぐに反映し、長い期間の平均線はもっと大きな全体の流れを表します。なので、短い線が長い線を追い越すのは、「最近の勢いが、大きな流れを変えるくらい強くなってきたぞ!」というサインだと考えることができるんです。

具体的な売買ルール(今回の検証)

エントリー条件

  • 短い期間の値段の平均線が、長い期間の平均線を、下から上に追い越したとき(ゴールデンクロス)。
  • ただし、追い越す直前までは、短い線が長い線の下にいたことを確認します。

エグジット条件

  • 短い期間の値段の平均線が、長い期間の平均線を、上から下に抜けてしまったとき(デッドクロス)。
  • ただし、抜ける直前までは、短い線が長い線の上にいたことを確認します。

リスク管理

もし、予想と反対に値段が動いてしまったときのために、「ここまで値段が下がったら取引をやめる」というルールをあらかじめ決めておきます。こうすることで、大きな損をしてしまうのを防ぎます。

再現手順(HowTo)

  1. Python/依存(ccxt, pandas, ta)をインストール
  2. ccxtでBTC/USDTのOHLCVを取得して前処理
  3. 『SMA Golden Cross』に必要な指標を算出(ta 等)
  4. 閾値・クロス条件から売買シグナルを生成
  5. 手数料・スリッページを加味して検証・評価

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数35回
勝率25.71%
平均利益3%
平均損失-1.46%
期待値-0.31%
プロフィットファクター0.71
最大ドローダウン21.09%
最終リターン-11.16%
シャープレシオ-0.23
HODL(Buy&Hold)16.58%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
SMA Golden Cross Trading Signal Generator
"""
import pandas as pd
import numpy as np


def calculate_sma_signals(df: pd.DataFrame, short_period: int = 20, long_period: int = 50) -> pd.DataFrame:
    """
    SMAゴールデンクロス戦略のシグナル生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ(最低限 'close' カラムが必要)
    short_period : int
        短期SMA期間
    long_period : int
        長期SMA期間
    
    Returns:
    --------
    pd.DataFrame
        以下のカラムが追加されたDataFrame:
        - sma_short: 短期SMA
        - sma_long: 長期SMA
        - is_buy: 買いシグナル (bool)
        - is_sell: 売りシグナル (bool)
    """
    df = df.copy()
    
    # SMA計算
    df['sma_short'] = df['close'].rolling(window=short_period, min_periods=short_period).mean()
    df['sma_long'] = df['close'].rolling(window=long_period, min_periods=long_period).mean()
    
    # 前日のSMA
    df['sma_short_prev'] = df['sma_short'].shift(1)
    df['sma_long_prev'] = df['sma_long'].shift(1)
    
    # ゴールデンクロス(短期SMAが長期SMAを上抜け)= 買いシグナル
    df['is_buy'] = (
        (df['sma_short'] > df['sma_long']) & 
        (df['sma_short_prev'] <= df['sma_long_prev']) &
        df['sma_short'].notna() &
        df['sma_long'].notna()
    )
    
    # デッドクロス(短期SMAが長期SMAを下抜け)= 売りシグナル
    df['is_sell'] = (
        (df['sma_short'] < df['sma_long']) & 
        (df['sma_short_prev'] >= df['sma_long_prev']) &
        df['sma_short'].notna() &
        df['sma_long'].notna()
    )
    
    # 不要な中間カラムを削除
    df.drop(['sma_short_prev', 'sma_long_prev'], axis=1, inplace=True)
    
    return df

なぜこの結果になったのか(3つの理由)

  1. 1今回のテストでは、取引の回数が35回と少なめでした。これは、売買の合図であるゴールデンクロスやデッドクロスが、あまり起きなかったからかもしれません。
  2. 2勝った回数の割合(勝率)が25.71%と低かったのは、この期間のビットコインの値段が、上がったり下がったりを繰り返して、はっきりとした流れが生まれにくかったからかもしれません。そのため、買う合図が出てもすぐに値段が下がってしまうような、「だまし」の合図が多かったと考えられます。
  3. 3最終的に、お金が11.16%減ってしまうという残念な結果になりました。これは、勝った回数が少なかったことと、負けたときの金額が勝ったときの金額より大きくなってしまったことが原因です。特に、一番大きくお金が減ってしまったとき(最大DD)には21.09%も減っていて、これが全体の結果に響きました。

この結果から学べる3つの教訓

  1. 12つの線が交差するタイミングだけを見るのではなく、そのときの値段の勢いが本当に強いのかも一緒に見ることが大切だとわかりました。
  2. 2ビットコインのように値段の動きが大きいものは、損をしないためのルール(リスク管理)をしっかり決めておくことが、ものすごく大事だと学びました。
  3. 3この期間だけの結果では、この方法が本当にうまくいくのかどうか、はっきりとは言えません。もっと長い期間で試したり、他のコインで試したりして、結果を比べる必要があります。

リスク管理の具体的手法

取引量の決め方

1回の取引で損してもいい金額を、最初に決めておきます。例えば、持っているお金全体の1%〜2%くらいです。もし10万円持っているなら、1回のチャレンジで失ってもいいのは1000円〜2000円まで、という感じです。

損失が大きくなったときの対処法

もし取引で負けが続いて、持っているお金が10%のように大きく減ってしまったら、一度すべての取引をお休みします。そして、やり方が間違っていないか、もう一度作戦を考え直します。こうすることで、これ以上損が大きくなるのを防ぎます。

資金管理の方法

持っているお金を、全部一度に使うのはやめましょう。まずは少しのお金で始めて、うまくいったら少しずつ使うお金を増やし、負けたら減らす、というように、状況に合わせて調整することが大切です。

改良案の具体的提案

  • ゴールデンクロスが起きた後、すぐに買うのではなく、少しだけ様子を見て、本当に値段が上がりそうか確かめてから買うようにしてみる。
  • デッドクロスが起きた後も同じように、すぐに売るのではなく、少し様子を見てから取引をやめるタイミングを決める。
  • 移動平均線だけでなく、「今の値段は買われすぎかな?売られすぎかな?」を教えてくれる『RSI』のような、他の道具も一緒に使って、もっと確かなタイミングを探してみる。

実用性の向上(運用上の注意)

  • この方法を実際のお金で試す前に、過去のデータを使って「もしこのルールでやっていたら、どうなっていたかな?」という練習(シミュレーション)をしっかり行いましょう。
  • ビットコインは、予想もできないくらい急に値段が動くことがあります。そんなときのために、「ここまで下がったらやめる」という約束は、絶対に守りましょう。
  • この方法は、あくまでタイミングを知るための一つのヒントです。グラフを自分の目で見たり、他のニュースを参考にしたりして、最後は自分で「買うか」「売るか」を決めることが大切です。

検証の透明性と信頼性

  • データの出所: このテストでは、みんなが見られるビットコインの過去の値段の記録を使いました。
  • 検証のやり方: パソコンのプログラムを使って、この方法を過去のビットコインの値段の動きに当てはめて、どれくらいうまくいったか、または失敗したかを計算しました。
  • コード: このテストに使ったプログラムは、記事の中で見ることができます。
  • 注意事項: この記事や方法は、あくまで情報として紹介するもので、「この通りに投資しましょう」とオススメするものではありません。投資には、お金が減ってしまう危険もあります。もし挑戦するときは、必ず自分でよく考えて、自分の責任で行ってくださいね。

よくある質問

Q.「移動平均線」って、いったい何ですか?

A.過去の決まった期間の値段の「平均点」を計算して、線でつないだグラフのことです。最近の動きをすぐに反映する「短い線」と、もっと長い期間の大きな流れを表す「長い線」の2つをよく使います。

Q.ゴールデンクロスが出たら、本当に値段は上がるんですか?

A.必ず上がるわけではありません。「これから値段が上がるかもしれないぞ」という勢いが出てきた合図の一つですが、すぐにまた下がってしまうこともあります。だから、他の情報も合わせて考えることが大切なんです。

Q.「最大DD」って、どういう意味ですか?

A.「最大ドローダウン」という言葉の略です。これは、お金が一番増えていた時から、一番減ってしまった時までの下落率のことです。この数字が大きいほど、途中で大きく資産が減ってしまった時期があった、ということになります。

Q.この方法で、どれくらいもうかる可能性がありますか?

A.今回のテストではお金が減ってしまいましたが、やり方自体は利益を狙えるものです。ただ、ビットコインの値段の状況によって結果は全然変わってくるので、「絶対にこれだけもうかる」とは言えません。

Q.中学生でも、この方法を試すことはできますか?

A.はい、仕組みを理解すれば、自分で試すことができます。ただし、実際にお金を使って取引をするのは、法律で決められた年齢になってから、そしておうちの人の許可も必要です。まずはお金を使わずに、紙の上やパソコンの中で練習してみるのがオススメですよ。

Q.検証に使用した期間と時間足は?

A.1h足で検証しました。期間は記事内の概要をご確認ください。

Q.最終リターンと最大ドローダウンは?

A.最終リターンは-11.16%、最大DDは21.09%です。

Q.勝率やPFはどの程度?

A.勝率は25.71%、プロフィットファクターは0.71です。

Q.HODLとの比較結果は?

A.HODLは16.58%でした。記事内の比較表をご覧ください。

Q.手数料やスリッページは考慮済み?

A.はい。バックテスト設定の手数料・スリッページを損益に反映しています。

Q.市場環境はトレンド/レンジどちらに近かった?

A.期間中はトレンド優勢と推測されます。

Q.この戦略は初心者でも扱える?

A.基礎的な指標と検証環境の知識があれば扱えます。まずは少額・デモから。

Q.推奨のリスク管理は?

A.最大DDを踏まえた損切り・ポジションサイジングと、システム停止基準の設定を推奨します。

Q.将来の結果は期待できる?

A.過去の結果は将来を保証しません。市場環境やパラメータ適合性に大きく依存します。

Q.改良の方向性は?

A.トレンド・ボラティリティのフィルター併用、パラメータの再最適化、取引頻度の制御を検討してください。

著者情報