シェア:

ビットコインの未来予測に挑戦!ある作戦を試した結果は…?

このお話は、「ある作戦」を使って、ビットコインがこれから上がるか下がるかを予測し、いつ売り買いすればいいかを探る挑戦の記録です。1時間ごとの値動きのデータ(2025年4月28日〜8月26日のもの)で、この作戦がうまくいくか試してみました。さて、結果はどうだったでしょう?

取引数
577
勝率
12.65%
最終リターン
-89.59%
最大DD
89.59%

導入と前提条件

このお話は、「ある作戦」を使って、ビットコインがこれから上がるか下がるかを予測し、いつ売り買いすればいいかを探る挑戦の記録です。1時間ごとの値動きのデータ(2025年4月28日〜8月26日のもの)で、この作戦がうまくいくか試してみました。さて、結果はどうだったでしょう?

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

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

Ehlers Fisher Transform の理論的背景

この作戦の根っこにあるのは、「今の価格の勢いを見れば、未来の動きが少しわかるかも?」という考え方です。「Ehlers Fisher Transform」は、その勢いを敏感にキャッチするための特別な方法です。具体的には、最近の価格の一番高いところと一番安いところの間で、今の価格がどのへんにあるかを数字にします。その数字をさらに計算して、「Fisher変換」というグラフを作ります。このグラフが、「トリガー」という目印の線を下から上に突き抜けたら「買い」、上から下に突き抜けたら「売り」のサイン、という仕組みです。

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

エントリー条件

  • 勢いを表すグラフ(Fisher変換)が、目印の線(トリガー)を追い越した瞬間に「買います」。
  • ただし、まだ何も買ったり売ったりしていない時に限ります。

エグジット条件

  • 勢いを表すグラフ(Fisher変換)が、目印の線(トリガー)より下に行ってしまった瞬間に「売ります」。
  • これは、すでに買っているものを手放すということです。

リスク管理

大損しないための工夫も大切です。一度にたくさんのお金を使わず、少しずつ取引します。もし予想が外れても、大きなダメージを受けないようにするためです。また、「ここまで損したら、いったんストップする」というルールを決めておくことも重要です。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数577回
勝率12.65%
平均利益0.65%
平均損失-0.54%
期待値-0.39%
プロフィットファクター0.18
最大ドローダウン89.59%
最終リターン-89.59%
シャープレシオ-4.43
HODL(Buy&Hold)16.67%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Ehlers Fisher Transform Trading Signal
Fisher変換を使用したシグナル生成
"""
import pandas as pd
import numpy as np


def calculate_ehlers_fisher_transform_signals(df: pd.DataFrame,
                                            period: int = 10) -> pd.DataFrame:
    """
    Ehlers Fisher Transform戦略のシグナル生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    period : int
        計算期間(デフォルト: 10)
    
    Returns:
    --------
    pd.DataFrame
        シグナルが追加されたDataFrame
    """
    df = df.copy()
    
    # 中間価格
    df['hl2'] = (df['high'] + df['low']) / 2
    
    # 最高値と最低値
    df['max_high'] = df['hl2'].rolling(window=period).max()
    df['min_low'] = df['hl2'].rolling(window=period).min()
    
    # 正規化
    df['value'] = 2 * ((df['hl2'] - df['min_low']) / (df['max_high'] - df['min_low'] + 0.0001) - 0.5)
    df['value'] = np.clip(df['value'], -0.999, 0.999)
    
    # Fisher変換
    df['fisher'] = 0.5 * np.log((1 + df['value']) / (1 - df['value'] + 0.0001))
    df['trigger'] = df['fisher'].shift(1)
    
    # シグナル初期化
    df['signal'] = 0
    df['is_buy'] = False
    df['is_sell'] = False
    
    position = 0
    
    for i in range(period + 1, len(df)):
        # 買いシグナル(FisherがTriggerを上抜け)
        if position <= 0 and df['fisher'].iloc[i] > df['trigger'].iloc[i] and df['fisher'].iloc[i-1] <= df['trigger'].iloc[i-1]:
            df.loc[df.index[i], 'is_buy'] = True
            df.loc[df.index[i], 'signal'] = 1
            position = 1
            
        # 売りシグナル(FisherがTriggerを下抜け)
        elif position >= 0 and df['fisher'].iloc[i] < df['trigger'].iloc[i] and df['fisher'].iloc[i-1] >= df['trigger'].iloc[i-1]:
            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
    
    df['signal'] = df['signal'].fillna(0)
    
    return df


def get_strategy_name() -> str:
    """戦略名を返す"""
    return "Ehlers Fisher Transform"


def get_strategy_description() -> str:
    """戦略の説明を返す"""
    return "Fisher変換を使用したシグナル生成戦略"

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

  1. 1この作戦は、過去のデータで試したところ、勝った回数の割合(勝率)が約12.65%と、かなり低かったです。つまり、ほとんどの取引で負けてしまいました。
  2. 21回の取引で平均してどれくらい損するか(期待値)を計算すると、マイナス0.39%でした。これは、取引をすればするほど、少しずつお金が減っていく可能性が高いということです。
  3. 3最終的に、もとのお金が89.59%も減ってしまうという、とても残念な結果になりました。これは、一番大きく損した時の割合(最大DD)と同じ数字で、非常に大きな失敗だったことがわかります。

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

  1. 1「すごい計算方法」と聞いても、実際の取引で必ずうまくいくわけではない、ということを学びました。
  2. 2勝つ確率が低くても、一回で大きな利益が出ればプラスになることもありますが、この作戦ではそうはなりませんでした。
  3. 3取引の回数は577回と多かったですが、回数が多ければ成功する、というわけではないこともわかりました。

リスク管理の具体的手法

取引量の決め方

一度に持っているお金を全部使ってしまうのではなく、ほんの少し、例えば全体の1%や2%だけを使って取引をする、というルールを決めることです。

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

もしお金がどんどん減ってきてしまったら、「決めた金額以上に減ったら、しばらく取引をお休みする」というルールを作っておくことです。

資金管理の方法

取引に使うお金の上限を決めて、それを超えないようにします。また、もし利益が出たら、その一部は使わずに別の場所によけておくなど、大切なお金を守る計画を立てることです。

改良案の具体的提案

  • 「買い」や「売りのサインが出てもすぐには動かず、他の情報(例えば、値動きが激しいかどうかを示す道具など)も見て、もっと確実なタイミングで取引するようにしてみる。
  • 計算に使う「期間」の設定(今回は10)を、色々な数字に変えてみて、どれが一番良い成績になるかを探してみる。
  • 大きな損をしないように、「1回の取引で失ってもいい金額の上限(損切りライン)」を、もっと厳しく決めるルールを追加する。

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

  • 今回のテストでは残念な結果だったので、この作戦をそのまま使うのはおすすめできません。他の作戦と組み合わせたり、改善を加えてから試すのが良いでしょう。
  • 計算に使う設定の数字を少し変えるだけで、結果がガラッと変わることがあります。色々な設定で試してみることが大切です。
  • 実際にお金を使って取引する前に、必ずお試し(シミュレーション)で練習して、どんな結果になりそうかを確認しましょう。

検証の透明性と信頼性

  • データの出所: このテストで使ったのは、ビットコインの過去の1時間ごとの価格データです。
  • 検証のやり方: 過去のデータを使って、「もしこの作戦通りに自動で売り買いを繰り返したら、お金はどうなったか?」をコンピューターで計算しました。
  • コード: このテストで使ったプログラム(Pythonコード)は、誰でも見られるように公開されています。
  • 注意事項: このお話は、あくまで過去のデータで試した結果です。未来も同じように利益が出ることを保証するものではありません。投資は、ご自身の判断と責任で行ってくださいね。

よくある質問

Q.取引の「勝率が低い」って、どういうことですか?

A.取引した回数のうち、利益が出て「勝ち」になった回数が少ない、ということです。例えば100回取引して、勝ったのが12回だったら、勝率は12%になります。

Q.「期待値」ってなんですか?マイナスだとどうなるの?

A.「1回取引したら、平均でどれくらい儲かるか(または損するか)」を表す数字です。これがマイナスだと、平均すると1回取引するたびにお金が減ってしまう、ということになります。

Q.「PF」って聞いたことがあります。1より小さいとダメなんですか?

A.PF(プロフィットファクター)は、「儲けの合計」を「損の合計」で割ったものです。もし1より小さいと、儲けよりも損のほうが多かった、ということになり、作戦としてはうまくいっていないサインになります。

Q.この作戦、これから良くなる可能性はありますか?

A.あるかもしれません。設定する数字を変えたり、他のルールと組み合わせたりすることで、結果が良くなる可能性はあります。でも、必ず儲かるようになるという保証はないので、注意が必要です。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報