シェア:

「未来の値段がわかる計算式?」ビットコインの取引を試してみた結果

今回は、ビットコインを5分ごとという、とても短い時間で売り買いする作戦を試してみました。この作戦では「インバース・フィッシャー・トランスフォーム」という、値段の勢いがわかると言われる特別な計算方法を使います。でも、結果は残念ながらあまり良くありませんでした。どうしてうまくいかなかったのか、一緒に見ていきましょう!

取引数
810
勝率
30.12%
最終リターン
-96.09%
最大DD
96.16%

導入と前提条件

今回は、ビットコインを5分ごとという、とても短い時間で売り買いする作戦を試してみました。この作戦では「インバース・フィッシャー・トランスフォーム」という、値段の勢いがわかると言われる特別な計算方法を使います。でも、結果は残念ながらあまり良くありませんでした。どうしてうまくいかなかったのか、一緒に見ていきましょう!

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

  • 戦略名: Inverse Fisher Transform を使用したトレンド追従戦略
  • 対象銘柄: BTC/USDT
  • 時間足: 5m
  • 期間: 2024-07-21〜2025-08-25(399日間)
  • 初期資金: $10,000
  • 手数料・スリッページ: 0.1% / 0.1%
  • 取引所: binance

Inverse Fisher Transform の理論的背景

この作戦の裏側にある考え方は、「値段の動きって、実はだいたい決まった範囲に収まることが多いよね」というものです。そこでまず「RSI」という道具で、今の値段にどれくらい勢いがあるかを調べます。次に、その結果を「インバース・フィッシャー・トランスフォーム」で計算し直して、すごく分かりやすい数字に変身させます。この数字が、ある決まった線を超えたり、向きを変えたりしたときを「買う合図」や「売る合図」にしよう、というわけです。こうすれば、ちょっとした値段のふらつきにだまされずに、本当の大きな流れの変化をつかまえられるんじゃないか、と考えたんです。

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

エントリー条件

  • 計算して出てきた数字が、すごく低い場所から上を向き始めたら、「これから上がるかも!」と考えて買う、というルールです。

エグジット条件

  • 逆に、計算した数字がすごく高い場所から下を向き始めたら、「そろそろ下がるかも!」と考えて売る、というルールです。

リスク管理

どんな取引でも、大きな損をしないための「安全ルール」はとても大切です。例えば、「一度に全部のお金を使わない」とか、「予想が外れたら、傷が浅いうちにやめる」といったルールですね。ただ、今回の作戦では、この安全ルールがうまく働かず、残念ながら大きな損が出てしまいました。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数810回
勝率30.12%
平均利益0.54%
平均損失-0.8%
期待値-0.39%
プロフィットファクター0.28
最大ドローダウン96.16%
最終リターン-96.09%
シャープレシオ-0.4
HODL(Buy&Hold)67.84%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Inverse Fisher Transform Trading Signal Generator
価格を正規分布に変換してシグナルを明確化
"""
import pandas as pd
import numpy as np


def calculate_inverse_fisher_signals(df: pd.DataFrame,
                                    period: int = 9) -> pd.DataFrame:
    """
    Inverse Fisher Transform戦略のシグナル生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    period : int
        計算期間(デフォルト: 9)
    
    Returns:
    --------
    pd.DataFrame
        シグナルが追加されたDataFrame
    """
    df = df.copy()
    
    # RSI計算
    df['price_change'] = df['close'].diff()
    df['gain'] = df['price_change'].where(df['price_change'] > 0, 0)
    df['loss'] = -df['price_change'].where(df['price_change'] < 0, 0)
    
    df['avg_gain'] = df['gain'].rolling(window=period).mean()
    df['avg_loss'] = df['loss'].rolling(window=period).mean()
    
    df['rs'] = df['avg_gain'] / (df['avg_loss'] + 0.0001)
    df['rsi'] = 100 - (100 / (1 + df['rs']))
    
    # RSIを-1から1にスケーリング
    df['normalized'] = (df['rsi'] - 50) / 50
    
    # スムージング
    df['smooth'] = df['normalized'].ewm(span=5, adjust=False).mean()
    
    # Fisher Transform
    df['fisher'] = 0.5 * np.log((1 + df['smooth'].clip(-0.999, 0.999)) / (1 - df['smooth'].clip(-0.999, 0.999)))
    
    # Inverse Fisher Transform
    df['ift'] = (np.exp(2 * df['fisher']) - 1) / (np.exp(2 * df['fisher']) + 1)
    
    # シグナルライン
    df['ift_signal'] = df['ift'].shift(1)
    
    # シグナル生成
    df['is_buy'] = (df['ift'] > df['ift_signal']) & (df['ift'] > -0.5) & (df['ift_signal'] <= -0.5) & df['ift'].notna()
    df['is_sell'] = (df['ift'] < df['ift_signal']) & (df['ift'] < 0.5) & (df['ift_signal'] >= 0.5) & df['ift'].notna()
    
    # 不要カラム削除
    df.drop(['price_change', 'gain', 'loss', 'avg_gain', 'avg_loss', 'rs', 'rsi',
             'normalized', 'smooth', 'fisher', 'ift_signal'], axis=1, inplace=True, errors='ignore')
    
    return df

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

  1. 1勝った回数がとても少なかったからです。10回挑戦して、勝てたのは3回だけ。ほとんどの取引で負けてしまったので、お金が減ってしまいました。
  2. 21回の取引で、平均して少しずつお金が減ってしまう計算だったからです。これを繰り返すと、どんどんお金がなくなってしまいます。
  3. 3一番運が悪かったときには、持っていたお金のほとんど(96%)を失ってしまうほど、大きな損が出てしまったからです。これはとても危険な状態でした。

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

  1. 1たくさん負けても、たった1回の勝ちで全部取り返せるくらい、大きな勝ちをねらえる作戦じゃないとダメだ、ということです。
  2. 2「今がチャンス!」という合図だけで飛びつくのではなく、世の中全体の景気や、大きな値段の流れ(トレンド)もしっかり見ることが大切だ、ということです。
  3. 3どんなにすごい計算式を使っても、突然のニュースや予想外の出来事が起きると、うまくいかなくなってしまうことがある、ということです。

リスク管理の具体的手法

取引量の決め方

一度の挑戦で使うお金は、持っているお金全部じゃなくて、ほんの少しだけ(例えば100分の1とか)にしましょう。そうすれば、もし負けてもダメージは小さくて済みます。

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

もし、負けが続いて持っているお金が1割減ってしまったら、一度お休みして作戦を考え直す、というような「ストップルール」を決めておきましょう。

資金管理の方法

もし取引でうまく利益が出たら、その一部は貯金するなど、安全な場所に移しておきましょう。いつも心とお金に余裕を持つことが、落ち着いて取引するコツです。

改良案の具体的提案

  • 「買いだ!」「売りだ!」と判断するルールを、もっと厳しくします。本当に「これは絶対いける!」という時だけ挑戦するようにして、むだな取引を減らすんです。
  • ただビットコインを買って、じっと持っている作戦(これを「HODL(ホドル)」と言います)よりも、良い成績が出るように、作戦の根本から考え直してみます。
  • 5分ごとではなく、1時間ごとや1日ごとなど、もっと長い時間で値段の動きを見たり、他の計算方法と組み合わせたりして、作戦をパワーアップさせます。

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

  • 今回の作戦は、テストの結果がとても悪かったので、このまま真似するのは絶対にやめましょう。もし使うなら、自分でたくさん工夫や改良をすることが必要です。
  • 5分ごとの取引は、値段の動きがとても激しくてプロでも難しいです。慣れないうちは、もっとゆったりしたペースの取引から始めるのがおすすめです。
  • 取引を始める前には、経済ニュースなどをチェックして、「今日は何か大きなイベントがあるかな?」と確認するクセをつけましょう。

検証の透明性と信頼性

  • データの出所: この結果は、専門家が書いたプログラム(Pythonコード)と、そのプログラムで計算した成績のデータを元にしています。
  • 検証のやり方: 提供されたプログラムを使って、過去のビットコインの値段のデータで、「もしこの作戦を使っていたらどうなっていたか」というシミュレーションをして、成績を確かめました。
  • コード: この作戦を試したプログラムの設計図(コード)は、公開されています。
  • 注意事項: 注意してほしいのですが、この結果はあくまで過去のデータで試したものです。未来でも同じようにうまくいくとは限りません。お金を実際に使うときは、必ず自分でよく考えて、自分の責任で行ってくださいね。

よくある質問

Q.この「インバース・フィッシャー・トランスフォーム」って、何かの魔法の呪文なの?

A.ううん、魔法の呪文じゃないんですよ!これは、値段の動きの勢いを「もっと見やすくしよう!」というための、算数を使った計算方法の名前なんです。

Q.ビットコインの売り買いで、5分ごとって短すぎない?

A.その通り!5分ごとだと値段の動きがすごく速くて、まるでジェットコースターみたいなんです。だから、次にどうなるか予想するのがとても難しくて、損をしやすくなってしまうことがあるんです。

Q.勝った確率が30%ってことは、ほとんど負けちゃってるってこと?

A.はい、そうです。もし10回挑戦したら、7回は負けてしまう計算になります。これは、かなり厳しい成績ですね。

Q.PFって、何の暗号?成績が良いの?悪いの?

A.PFは「プロフィット・ファクター」の略で、作戦の通信簿みたいなものです。「もうかった金額」を「損した金額」で割り算して計算します。もし数字が1より大きければ、もうかっている証拠。でも、今回の結果は1よりずっと小さく、損した金額の方が大きかったことを表しています。

Q.HODL(ホドル)って面白い名前だけど、どういう意味?

A.これは、ビットコインなどの暗号資産(仮想通貨)の世界で使われる合言葉みたいなもので、「何があっても、がっちり持ち続けるぞ!」という意味なんです。実は今回、何度も売り買いする作戦よりも、ただ買ってじっと持っているだけの「HODL」の方が、良い結果だったんですよ。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報