シェア:

ビットコインでうまく取引するコツ!賢い売買のタイミングを探る方法【マクギンリー・ダイナミック戦略】

ビットコインの取引、もっと上手になりたいと思いませんか?この方法では、値段の動きに合わせて形を変える「魔法の線」を使います。これを使えば、いつ買ったり売ったりすればいいかのヒントが見つかるかもしれません。誰でもわかるように、やさしく説明しますね!

取引数
85
勝率
18.82%
最終リターン
-19.58%
最大DD
22.28%

導入と前提条件

ビットコインの取引、もっと上手になりたいと思いませんか?この方法では、値段の動きに合わせて形を変える「魔法の線」を使います。これを使えば、いつ買ったり売ったりすればいいかのヒントが見つかるかもしれません。誰でもわかるように、やさしく説明しますね!

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

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

McGinley Dynamic の理論的背景

この方法が作られたのには理由があります。それは、「値段の動きは、いつも同じスピードではない」という考え方からです。ふつうの分析で使う線は、値段が急に動くと、その変化に気づくのが少し遅れてしまうことがあります。でも「マクギンリー・ダイナミック」の線は、値段の動きに合わせて自分を調整するので、実際の値段の動きにもっと近づくことができます。風が強いときに傘を少しすぼめ、弱いときに広げるようなイメージです。これによって、値段が上がり始めるタイミングや、下がり始めるタイミングを、より早く見つけようとするのが目的です。

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

エントリー条件

  • 値段の線が「魔法の線」を追い越して、上にグンと出たとき。
  • そして、速く動く線が、ゆっくり動く線を追い越して上にでたとき。
  • この2つの条件がそろって、まだ何も買ったり売ったりしていないときに「買い」を考えます。

エグジット条件

  • 値段の線が「魔法の線」を下に割り込んでしまったとき。
  • そして、速く動く線が、ゆっくり動く線を下に割り込んだとき。
  • この2つの条件がそろって、すでに「買い」の取引をしているときに「売り」を考えます。

リスク管理

取引をするときは、一度にたくさんのお金を失わないように、とても気をつける必要があります。たとえば、「もし損が出ても、持っているお金のこれくらいまでにする」と決めて、それに合わせて取引する量を決めます。また、「これ以上損が大きくなったら、必ずやめる」というルールを作っておくことも、大きな失敗をふせぐためにとても大切です。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数85回
勝率18.82%
平均利益2.41%
平均損失-0.86%
期待値-0.24%
プロフィットファクター0.64
最大ドローダウン22.28%
最終リターン-19.58%
シャープレシオ-0.43
HODL(Buy&Hold)16.56%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
McGinley Dynamic Trading Signal
市場速度に自動適応する移動平均線戦略
"""
import pandas as pd
import numpy as np


def calculate_mcginley_dynamic_signals(df: pd.DataFrame,
                                      period: int = 14,
                                      factor: float = 0.6) -> pd.DataFrame:
    """
    McGinley Dynamic戦略のシグナル生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    period : int
        基本期間(デフォルト: 14)
    factor : float
        調整係数(デフォルト: 0.6)
    
    Returns:
    --------
    pd.DataFrame
        シグナルが追加されたDataFrame
    """
    df = df.copy()
    
    # McGinley Dynamic計算
    md = pd.Series(index=df.index, dtype=float)
    md.iloc[0] = df['close'].iloc[0]
    
    for i in range(1, len(df)):
        if pd.notna(md.iloc[i-1]):
            md.iloc[i] = md.iloc[i-1] + (df['close'].iloc[i] - md.iloc[i-1]) / \
                        (period * pow(df['close'].iloc[i] / md.iloc[i-1], 4) * factor)
        else:
            md.iloc[i] = df['close'].iloc[i]
    
    df['md'] = md
    
    # 短期と長期のMcGinley Dynamic
    md_fast = pd.Series(index=df.index, dtype=float)
    md_fast.iloc[0] = df['close'].iloc[0]
    
    fast_period = int(period / 2)
    for i in range(1, len(df)):
        if pd.notna(md_fast.iloc[i-1]):
            md_fast.iloc[i] = md_fast.iloc[i-1] + (df['close'].iloc[i] - md_fast.iloc[i-1]) / \
                             (fast_period * pow(df['close'].iloc[i] / md_fast.iloc[i-1], 4) * factor)
        else:
            md_fast.iloc[i] = df['close'].iloc[i]
    
    df['md_fast'] = md_fast
    
    # シグナル初期化
    df['signal'] = 0
    df['is_buy'] = False
    df['is_sell'] = False
    
    # 価格とMDの関係でシグナル生成
    position = 0
    
    for i in range(period, len(df)):
        # 価格がMDを上回り、上昇トレンドの場合
        if position <= 0 and df['close'].iloc[i] > df['md'].iloc[i] and df['md_fast'].iloc[i] > df['md'].iloc[i]:
            df.loc[df.index[i], 'is_buy'] = True
            df.loc[df.index[i], 'signal'] = 1
            position = 1
        
        # 価格がMDを下回り、下降トレンドの場合
        elif position >= 0 and df['close'].iloc[i] < df['md'].iloc[i] and df['md_fast'].iloc[i] < df['md'].iloc[i]:
            df.loc[df.index[i], 'is_sell'] = True
            df.loc[df.index[i], 'signal'] = -1
            position = -1
        else:
            # ポジション維持
            df.loc[df.index[i], 'signal'] = position
    
    # NaN値を0で埋める
    df['signal'] = df['signal'].fillna(0)
    
    return df


def get_strategy_name() -> str:
    """戦略名を返す"""
    return "McGinley Dynamic"


def get_strategy_description() -> str:
    """戦略の説明を返す"""
    return "市場速度に自動適応する動的移動平均線を使用したトレンド戦略"

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

  1. 1全部で85回取引してみたところ、勝てたのは約16回(勝率18.82%)でした。勝つことのほうが少なくて、ちょっと難しい結果になりました。
  2. 2もうけが出た取引もあったのですが、それ以上に損が出た取引のほうが多かったみたいです。そのため、全体で見ると約19.58%のお金が減ってしまう結果になりました。
  3. 3もしこの方法を使わずに、ただビットコインをずっと持っていただけ(これを「HODL」と言います)だったら、お金は16.56%増えていました。この方法を使ったら逆に損をしてしまったので、今回はあまりうまくいかなかったようです。

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

  1. 1勝つ回数が少なくても、一回で大きく勝てれば、全体ではプラスになることもあります。でも、今回のやり方では、それも難しかったようです。
  2. 2値段の動きがとても激しいときや、上がったり下がったりしてはっきりした流れがないときには、この方法だけではうまくいかないことがあるのかもしれません。
  3. 3うまくいかなかったときは、「どうしてだろう?」と原因をしっかり考えて、もっと良くするための方法を探すことが、次につながる大切な一歩です。

リスク管理の具体的手法

取引量の決め方

持っているお金のうち、一度の取引で失っても大丈夫と思える金額を、最初に決めておきます。たとえば、持っているお金の1%とか2%くらいです。もし10万円持っていたら、1回の取引で損してもいいのは1000円から2000円まで、という感じです。そして、その金額に収まるように、買う量を調整します。

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

もし取引を始めたあと、まだ売っていないけど損が出ている状態(含み損)が、持っているお金の10%など、決めておいた割合を超えてしまったら、一度ぜんぶ売ってしまいます。これは、損がこれ以上大きくならないようにするためです。そして、どうして損が大きくなったのかをよく考えてから、もう一度取引を始めるかどうかを決めます。

資金管理の方法

取引に使うお金は、なくなってしまっても普段の生活に困らないお金だけにしましょう。これは絶対に守ってほしいルールです。また、もしもうけが出たら、その一部は貯金するなど、長い目で見て上手にお金を管理していくことが大切です。

改良案の具体的提案

  • 買うタイミングと売るタイミングのルールを、もう少し慎重にしてみる。たとえば、値段の線と「魔法の線」が、もっと大きく離れたときだけ取引するようにしてみる、などです。
  • 損が大きくなる前に、必ず取引をやめる「損切り」(決めた値段になったら必ず売ること)というルールを、もっとしっかり守るようにする。
  • この方法だけでなく、ほかの分析の仕方も一緒に使って、もっと自信を持って「ここだ!」と思えるタイミングで取引できるようにする。

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

  • この方法は、ビットコインのように値段の上がり下がりが激しいもので試すと、うまくいくことがあるかもしれません。でも、その分、損も大きくなる可能性があるので注意が必要です。
  • 本当に自分のお金で試す前に、昔のデータを使って「この方法を使っていたら、もうかったかな?損したかな?」と試してみる(これをバックテストと言います)ことが、とても大事です。それで、自分に合っているかどうかを確認しましょう。
  • 世の中の状況はいつも変わっていきます。だから、一度決めたルールにこだわりすぎずに、ときどき計算に使う数字(設定値)を変えてみたり、やり方そのものを見直したりすることも大切です。

検証の透明性と信頼性

  • データの出所: この分析では、ビットコイン(BTC/USDT)の2025年4月28日から2025年8月26日までの、1時間ごとの値段のデータを使いました。
  • 検証のやり方: 昔のデータを使って、コンピューターのプログラムでこの方法を試してみて、どれくらいうまくいったかを計算しました。
  • コード: 計算や、売り買いの合図を出すために使ったコンピューターのプログラムは、見ることができるようになっています。
  • 注意事項: このお話は、取引の勉強や研究のためのものです。「こうすれば絶対もうかるよ」とお勧めしているわけではありません。本当にお金を使って取引するときは、必ず自分でよく考えて、自分の責任で行ってくださいね。昔うまくいったからといって、これからも同じようにうまくいくとは限りません。

よくある質問

Q.「魔法の線」って何?どうやって動くの?

A.「魔法の線」は、「マクギンリー・ダイナミック」という特別な計算で作られる線のことだよ。普通の線と違うのは、値段の動きが速いときは線も速く、動きがゆっくりなときは線もゆっくり動くように、かしこく自動で変わってくれるところなんだ。だから、本当の値段の動きに、よりピッタリついていきやすいんだよ。

Q.勝率が低いってことは、損ばかりするの?

A.「勝率が低い」っていうのは、取引した回数のうち、勝てた回数が少なかったってことだよ。でも、たとえば10回取引して9回負けても、最後の1回ですごく大きく勝てれば、全体ではプラスになることもあるんだ。ただ、今回の方法では、勝ったときにもらえるお金よりも、負けたときに失うお金のほうが大きかったみたいだね。

Q.「HODL」ってどういう意味?

A.「HODL(ホドル)」は、仮想通貨の世界でよく使われる言葉で、「売らずにずっと持っておく」っていう意味だよ。値段が下がってもあわてて売らないで、将来値段が上がるのを信じて待ち続ける投資のやり方なんだ。

Q.「最大DD」って、一番損したときのこと?

A.「最大DD」は「さいだいドローダウン」って読むんだ。これは、お金が一番増えていたときから、一番減ってしまったときまでの、下がり幅の割合のことだよ。たとえば、おこづかいが1000円まで増えたあと、一番減ったときに800円になったら、200円減ったから最大DDは20%になるんだ。どれくらい大きなピンチがあったかがわかる数字だよ。

Q.この戦略は、ビットコイン以外でも使えるの?

A.この方法は、ビットコインみたいに値段が大きく動くものに向いていると言われているよ。でも、他の仮想通貨や株みたいに値段が変わるものなら、試してみる価値はあるかもしれないね。ただし、使う前には必ず、昔のデータでうまくいくか試してみることが大切だよ。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報