シェア:

ビットコインの値段の「落ち込み」と「勢い」でチャレンジ!AIの投資成績をチェック!

この作戦は、AI(人工知能)を使ったビットコインの投資チャレンジです。ビットコインの値段がガクッと下がった後、また上がりそうな勢いが出てきたタイミングで買ったり売ったりします。1時間ごとの値段の動きを見て、約1年間でどんな成績になったかを調べてみました。どんな考え方で動いて、結果はどうだったのか、分かりやすく説明しますね。

取引数
158
勝率
21.52%
最終リターン
-31.78%
最大DD
59.61%

導入と前提条件

この作戦は、AI(人工知能)を使ったビットコインの投資チャレンジです。ビットコインの値段がガクッと下がった後、また上がりそうな勢いが出てきたタイミングで買ったり売ったりします。1時間ごとの値段の動きを見て、約1年間でどんな成績になったかを調べてみました。どんな考え方で動いて、結果はどうだったのか、分かりやすく説明しますね。

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

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

Ulcer Index Trend の理論的背景

この作戦の基本的な考え方は、「一度大きく値段が下がったものは、また元気が出れば上がりやすい」とか、「すごく上がったものは、元気がなくなれば下がりやすい」というものです。特に、「移動平均線」という、これまでの値段の平均をしめす線が大事です。この線が上を向いていて、今の値段が線より上にあれば、「よし、これから上がりそうだ!」と判断します。逆に、線が下を向いていて、今の値段が線より下なら、「これから下がりそうだな…」と考えます。さらに、「アルサー・インデックス」という道具を使って、値段がガクッと下がりすぎていないかもチェックします。すごく大きく落ち込んでいない時に、さっきの「勢い」を判断することで、もっと確実なタイミングで買ったり売ったりしよう、というわけです。

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

エントリー条件

  • 値段がそんなに大きく落ち込んでいなくて、値段の平均線が上を向いていて、今の値段がその線より上になった時(「買う」と決める時)
  • 値段がそんなに大きく落ち込んでいなくて、値段の平均線が下を向いていて、今の値段がその線より下になった時(「売る」と決める時)

エグジット条件

  • 「買う」で持っていたけど、値段が平均線を下回ってしまった時(取引をやめる時)
  • 「売る」で持っていたけど、値段が平均線を上回ってしまった時(取引をやめる時)
  • 利益が出ている時に、反対の「買う」や「売る」のサインが出た時(利益を確定させて取引をやめる時)

リスク管理

もし予想と反対に値段が動いてしまったら、損が大きくならないうちに取引をやめるルール(損切り)を決めておきます。また、一度にたくさんのお金を使わないように、取引する量を調整することも大切です。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数158回
勝率21.52%
平均利益4.11%
平均損失-1.38%
期待値-0.2%
プロフィットファクター0.83
最大ドローダウン59.61%
最終リターン-31.78%
シャープレシオ-0.15
HODL(Buy&Hold)69.03%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Ulcer Index Trend
Ulcer Index 低位+SMA順行でトレンド継続を狙うのだ。
"""
import pandas as pd
import numpy as np


def _ulcer_index(close: pd.Series, period: int = 14) -> pd.Series:
    rolling_max = close.rolling(period).max()
    drawdown_pct = 100 * (close - rolling_max) / rolling_max.replace(0, np.nan)
    squared = (drawdown_pct ** 2).rolling(period).mean()
    return squared.pow(0.5)


def calculate_ulcer_trend_signals(df: pd.DataFrame, period: int = 14, ui_threshold: float = 5.0, ma_period: int = 50) -> pd.DataFrame:
    out = df.copy()
    out['ui'] = _ulcer_index(out['close'], period)
    out['sma'] = out['close'].rolling(ma_period).mean()
    out['slope'] = out['sma'].diff()
    out['is_buy'] = (out['ui'] < ui_threshold) & (out['close'] > out['sma']) & (out['slope'] > 0)
    out['is_sell'] = (out['ui'] < ui_threshold) & (out['close'] < out['sma']) & (out['slope'] < 0)
    return out

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

  1. 1この作戦がうまくいった確率は約21%と、ちょっと低めでした。計算上、続けると少しずつ損をしてしまう可能性が高い結果になりました。これは、作戦が考えていた「下がった後の勢い」が、思ったほどうまく働かなかったのかもしれません。
  2. 2158回も取引しましたが、結果として持っていたお金が約32%減ってしまいました。これは、たくさんの取引で少しずつ損が積み重なったか、いくつかの大きな失敗が原因だったと考えられます。
  3. 3稼いだお金(利益)と失ったお金(損失)を比べると、失ったお金の方が多かったようです。また、この期間はビットコインをただ持っているだけ(HODL)の方が、結果的に利益が出ていました。これは、ビットコインの値段が全体的に上がっていた時期だったからかもしれません。

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

  1. 1勝つ確率が低くても利益を出せる作戦はありますが、今回の作戦は、長い目で見ると損をしやすいタイプだということが分かりました。
  2. 2AIに自動で取引をまかせても、必ずうまくいくわけではないんですね。作戦の中身や、その時の世の中の状況によって、成績は大きく変わるということを学びました。
  3. 3一番大きく損をした時には、持っていたお金が半分以上も減ってしまいました(最大59.61%のマイナス)。これは、損が大きくなりすぎないようにするルールが、あまりうまく働かなかったことを示しているかもしれません。

リスク管理の具体的手法

取引量の決め方

一回の取引で使うお金は、持っているお金全部のうちの、ほんの一部(例えば100分の1とか)にしましょう。そうすれば、もし失敗しても、全体へのダメージは小さくてすみます。

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

もし損がどんどんふくらんで、持っているお金の1割がなくなってしまったら、その日は取引をやめる、といったルールを作っておくと、パニックになってさらに損をすることを防げます。

資金管理の方法

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

改良案の具体的提案

  • 作戦で使っている「どれくらい落ち込んだらダメか」とか「どれくらいの期間の平均を見るか」といった数字の設定を、もっと細かく調整してみると、成績が良くなるかもしれません。
  • 「買う」や「売る」のサインが出てもすぐに行動せず、例えば大事なニュースが出ているかなど、他の条件も見てから最終的に決めるようにすると、失敗が減るかもしれません。
  • 一度の取引で使うお金の量を減らしたり、損がある金額を超えたらその日はお休みにするなど、もっと厳しいルールを作って、大きな失敗を防ぐ方法が考えられます。

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

  • この結果は、あくまでも過去のデータで試したものです。未来も同じようにうまくいくとは限りません。本当のお金を使う前に、必ずお試し用の取引(デモ取引)などで練習してください。
  • 世の中の状況はいつも変わっています。この作戦がうまくいく時もあれば、うまくいかない時もあります。定期的に成績をチェックして、必要なら作戦の中身や設定を見直しましょう。
  • AIの自動取引は便利ですが、全部おまかせにするのは危険です。自分でも世の中の動きを勉強して、最後は自分で判断できるようになることが、長く成功するためのカギですよ。

検証の透明性と信頼性

  • データの出所: このレポートは、提供されたデータを使って作られています。
  • 検証のやり方: 提供されたプログラムの設定を使って、過去のデータで「もしこの作戦を使っていたらどうなっていたか」をシミュレーションした結果です。
  • コード: この作戦を動かすためのプログラム(コード)は、誰でも見られるようになっています。
  • 注意事項: この情報は、投資をおすすめするものではありません。投資をするかどうかは、ご自身の判断でお願いします。過去の成績が、未来の利益を約束するわけではありません。

よくある質問

Q.「Ulcer Index」って何?

A.「Ulcer Index(アルサー・インデックス)」は、値段が一時的にどれだけガクッと下がったかを測るための道具だよ。「山の一番高いところから、どれくらい谷底まで落ちたか」みたいな、落ち込みの激しさを数字で表してくれるんだ。この数字が小さいほど、大きな落ち込みがなかった、ということになるよ。

Q.「SMA順行」ってどういう意味?

A.「SMA」は「単純移動平均線」のことで、これまでの値段の平均を線で結んだものだよ。「順行」というのは、その線が値段と同じ方向に進んでいる状態のこと。ここでは、平均線が右肩上がりに上を向いていて、今の値段もその線より上にある状態を指しているんだ。これを「上昇の勢いが強い」と判断するんだよ。

Q.勝つ確率が低いのに、どうして利益が出ることもあるの?

A.それはね、「損小利大(そんしょうりだい)」という考え方なんだ。例えば、10回取引して9回負けても、その9回の負けが全部100円ずつの小さな損だとする。でも、たった1回勝った時に2000円の大きな利益が出れば、全部合わせるとプラスになるでしょ?そんなふうに、勝つ確率が低くても、勝つときに大きく勝てば、トータルで利益を出すことはできるんだ。ただ、今回の作戦はそうならなかったみたいだね。

Q.「PF」って何?

A.「PF」は「プロフィットファクター」の略で、作戦の「稼ぎ力」をはかる成績表みたいなものだよ。稼いだ利益の合計を、失った損失の合計で割って計算するんだ。PFが「1」より大きければ、失ったお金より稼いだお金の方が多いってこと。逆に「1」より小さいと、残念ながら損しちゃった、ということになるんだ。

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

A.「HODL(ホドル)」は、投資の世界で使われる言葉で、「とにかく買ったら、値段が上がっても下がっても気にせず、ずーっと持ち続ける」っていう作戦のことだよ。売ったり買ったりしないで、長い目で見て価値が上がるのを信じて待つスタイルのことなんだ。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報