シェア:

ビットコインの「値動きの勢い」を見て売り買い!トレンド強度インデックス(TII)作戦

この作戦は、ビットコインの値段の「勢い」をヒントにして、いつ買うか、いつ売るかを決めるやり方です。5分ごとという短い時間で、何度も売り買いをして、もうけを出すことを目指します。でも、残念ながら、結果はあまり良くなかったみたいです。なぜうまくいかなかったのか、一緒に見ていきましょう。

取引数
396
勝率
30.05%
最終リターン
-82.53%
最大DD
82.98%

導入と前提条件

この作戦は、ビットコインの値段の「勢い」をヒントにして、いつ買うか、いつ売るかを決めるやり方です。5分ごとという短い時間で、何度も売り買いをして、もうけを出すことを目指します。でも、残念ながら、結果はあまり良くなかったみたいです。なぜうまくいかなかったのか、一緒に見ていきましょう。

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

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

Trend Intensity Index の理論的背景

この作戦は、「流れに乗る」という考え方が基本になっています。「一度上がったり下がったりし始めたら、しばらくその方向は続くことが多い」という考え方です。TIIは、ある時間の中で、最後の値段が平均の値段よりも高かった時間の割合を数字にしたものです。この数字が大きいほど、「上がる勢いが強いぞ!」と判断します。短い時間のTIIと、長い時間のTIIを比べることで、勢いがこれから強くなるか、弱くなるかを見つけます。具体的には、短い時間のTIIが、長い時間のTIIを追い越したとき(これをゴールデンクロスと呼びます)は、「これから値段が上がる勢いがつきそうだ!」と考えて「買い」ます。逆に、追い越されたとき(デッドクロス)は、「これから下がる勢いがつきそうだ…」と考えて「売り」ます。ただし、もともとの勢いが弱いときは、売り買いの合図が出ても何もしません。

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

エントリー条件

  • 短い時間のTIIが、長い時間のTIIを追い越したとき(ゴールデンクロス)に買います。
  • ただし、追い越す前は、短い時間のTIIが長い時間のTIIより下にいたことが条件です。
  • さらに、値動きの勢いが、ある基準(この作戦では20)より強いときだけ、というルールもあります。
  • (※この作戦では「買う」ルールだけが決められています。ふつうは、値段が上がっているときに買うのが基本です。)

エグジット条件

  • 持っているビットコインは、短い時間のTIIが、長い時間のTIIに追い越されたとき(デッドクロス)に売ります。
  • これも、追い越される前は、短い時間のTIIが長い時間のTIIより上にいたことが条件です。
  • そして、値動きの勢いが、ある基準(この作戦では20)より強いときだけ、というルールです。
  • (※この作戦では「売る」というのは、持っているものを手放すという意味です。先に売ってから後で買う「空売り」をしたい場合は、また別のルールが必要です。)

リスク管理

この作戦では、最大で持っているお金の80%以上も損をしてしまうことがありました。これは、損が大きくなったときにすぐに売る、という「損切り」のルールがうまく働かなかったのかもしれません。大きな損をしないためには、あらかじめ「これ以上損したら、あきらめて売る」というラインを決めておくことがとても大事です。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数396回
勝率30.05%
平均利益0.74%
平均損失-0.93%
期待値-0.43%
プロフィットファクター0.36
最大ドローダウン82.98%
最終リターン-82.53%
シャープレシオ-0.34
HODL(Buy&Hold)17.92%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Trend Intensity Index Trading Signal Generator
トレンドの強度と方向を測定
"""
import pandas as pd
import numpy as np


def calculate_tii_signals(df: pd.DataFrame,
                         major_period: int = 60,
                         minor_period: int = 30) -> pd.DataFrame:
    """
    Trend Intensity Index戦略のシグナル生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    major_period : int
        主要期間(デフォルト: 60)
    minor_period : int
        短期期間(デフォルト: 30)
    
    Returns:
    --------
    pd.DataFrame
        シグナルが追加されたDataFrame
    """
    df = df.copy()
    
    # 移動平均計算
    df['ma_major'] = df['close'].rolling(window=major_period).mean()
    df['ma_minor'] = df['close'].rolling(window=minor_period).mean()
    
    # 価格と移動平均の偏差
    df['dev_major'] = df['close'] - df['ma_major']
    df['dev_minor'] = df['close'] - df['ma_minor']
    
    # ポジティブ・ネガティブ偏差のカウント
    df['pos_major'] = (df['dev_major'] > 0).astype(int)
    df['neg_major'] = (df['dev_major'] < 0).astype(int)
    df['pos_minor'] = (df['dev_minor'] > 0).astype(int)
    df['neg_minor'] = (df['dev_minor'] < 0).astype(int)
    
    # TII計算(期間内のポジティブ偏差の割合)
    df['tii_major'] = df['pos_major'].rolling(window=major_period).sum() / major_period * 100
    df['tii_minor'] = df['pos_minor'].rolling(window=minor_period).sum() / minor_period * 100
    
    # TII差分(短期と長期の差)
    df['tii_diff'] = df['tii_minor'] - df['tii_major']
    
    # TII変化率
    df['tii_change'] = df['tii_diff'] - df['tii_diff'].shift(1)
    
    # トレンド強度
    df['trend_strength'] = np.abs(df['tii_major'] - 50)
    
    # シグナル生成
    df['tii_diff_prev'] = df['tii_diff'].shift(1)
    df['is_buy'] = (
        ((df['tii_diff'] > 0) & (df['tii_diff_prev'] <= 0)) &  # ゴールデンクロス
        (df['trend_strength'] > 20)  # トレンドが十分強い
    ) & df['tii_diff'].notna()
    df['is_sell'] = (
        ((df['tii_diff'] < 0) & (df['tii_diff_prev'] >= 0)) &  # デッドクロス
        (df['trend_strength'] > 20)  # トレンドが十分強い
    ) & df['tii_diff'].notna()
    
    # 不要カラム削除
    df.drop(['ma_major', 'ma_minor', 'dev_major', 'dev_minor', 
             'pos_major', 'neg_major', 'pos_minor', 'neg_minor',
             'tii_change', 'trend_strength', 'tii_diff_prev'], axis=1, inplace=True, errors='ignore')
    
    return df

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

  1. 1勝てたのは10回中3回くらいで、1回の売り買いで平均して少しずつ損をしていました。それが積み重なって、結果的にとても大きなマイナス(-82.53%)になってしまいました。
  2. 2もし、売り買いせずに、ただずっとビットコインを持っていただけなら、お金は増えていました(+17.92%)。この作戦を使ったせいで、逆に大きな損をしてしまったんです。
  3. 3一番調子が悪かったときには、持っていたお金の80%以上がなくなってしまうほど、大きな損をしました。これは、あっという間にお金をほとんど失ってしまう危険があった、ということです。

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

  1. 1勝つ回数が少なくても、1回勝ったときに大きくもうかれば、トータルではプラスになります。でも、この作戦では、勝ったときにもうかる金額が、負けたときに損する金額より小さかったようです。
  2. 2「流れに乗る」という考え方自体は良いアイデアです。でも、この作戦で使った「流れの強さをはかる方法」や「売り買いのタイミング」が、今のビットコインの動きには合っていなかったのかもしれません。
  3. 35分ごとという短い時間で、約400回も売り買いをしたのに、結果はマイナスでした。これは、一つ一つの売り買いの精度が低かったか、そもそも売り買いの回数が多すぎて、手数料などで損が増えたのかもしれません。

リスク管理の具体的手法

取引量の決め方

1回の売り買いで、持っているお金の全部を使うのは危険です。「もし失敗しても、失うのは持っているお金の1%か2%まで」と決めて、買う量を調整しましょう。例えば、100万円持っていたら、1回の失敗で失うのは1万円から2万円まで、といった具合です。

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

もし、持っているお金が全体で10%など、決めた割合以上減ってしまったら、一度すべての売り買いをストップします。そして、「なぜうまくいかないんだろう?」と原因を考えて、作戦を立て直す時間を作りましょう。

資金管理の方法

投資に使うお金は、なくなっても生活に困らない「余っているお金」だけにしましょう。もしもうかったら、その一部は使わずに取っておくなど、全体のお金の管理をしっかりすることが大切です。

改良案の具体的提案

  • 勝つ確率を上げるために、売り買いの合図が出てもすぐには動かず、他のヒントも使って「これは本当にチャンスかな?」と確かめるルールを追加すると良さそうです。
  • 大きな損をしないように、「これくらい損をしたら、すぐに売る」という「損切り」のルールをもっと厳しくします。そうすれば、1回で失うお金を少なくできます。
  • 作戦で使っている数字(長い時間や短い時間の設定)をいろいろ変えてみて、今のビットコインの動きに一番合う組み合わせを探すのも良い方法です。実験して、一番成績が良くなる設定を見つけましょう。

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

  • この作戦は5分ごとの値段を見るので、動きがとても速くて激しくなります。焦らず、落ち着いて判断することがとても大事です。
  • 過去のデータで試して「うまくいきそうだ!」と思っても、実際の未来で同じようにうまくいくとは限りません。まずは少ないお金で試してみて、本当にうまくいくか様子を見るのがおすすめです。
  • この作戦は、あくまで「値段の勢い」を見ているだけです。だから、突然大きなニュースが出たりして値段が急に動いたときは、作戦通りの合図が出ても損をしてしまうことがあります。世の中のニュースにも気をつけておきましょう。

検証の透明性と信頼性

  • データの出所: この説明は、元になったプログラムのコードと、その計算結果のデータを元に作られています。
  • 検証のやり方: 過去のビットコインの5分ごとの値段のデータを使って、ある期間で「もしこの作戦を使っていたらどうなっていたか?」をシミュレーションした結果です。
  • コード: この作戦をコンピューターで動かすためのプログラム(Pythonという言葉で書かれています)も公開されています。
  • 注意事項: この作戦の成績は、あくまで過去のものです。未来でも同じようにもうかることを保証するものではありません。投資をするときは、自分の判断と責任で行ってくださいね。また、この説明は投資のプロからのアドバイスではなく、あくまで分かりやすく解説したものです。

よくある質問

Q.TIIって、どうやって計算するの?

A.ある時間の中で、値段が平均よりも高かった時間の割合を数字にしたものです。「50」なら半分の時間、「80」なら8割の時間、値段が平均より高かったということです。数字が大きいほど、上がる勢いが強いことを表します。

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

A.「ホドル」と読みます。これは、ビットコインなどを売ったり買ったりせず、ただ「ずーっと持っておくこと」を意味するインターネットの言葉です。今回の結果では、この作戦を使うよりも、ただ持っていただけの方がもうかった、ということになります。

Q.「最大DD」って何?

A.「さいだいドローダウン」と読みます。これは、投資の途中で、お金が一番多かったときから一番少なくなったときまでの、下落率のことです。この作戦では、一時的にお金が80%以上も減ってしまった時期があった、という意味で、とてもリスクが高かったことを示しています。

Q.5分足って、短すぎない?

A.はい、5分ごとというのはとても短い時間です。そのため、値段の動きがとても速くて予想が難しくなります。また、何度も売り買いするので、そのたびにかかる手数料が積み重なって、損の原因になることもあります。

Q.この戦略で勝つためには、どうしたらいいの?

A.まず一番大事なのは、「損切り」のルールをしっかり作って、大きな損を避けることです。それから、作戦で使う数字を調整したり、他のヒントと組み合わせたりして、「ここだ!」というチャンスの時だけ売り買いするように作戦を改良していくと、うまくいく可能性が高まるかもしれません。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報