ビットコインの値段の「落ち込み」と「勢い」でチャレンジ!AIの投資成績をチェック!
この作戦は、AI(人工知能)を使ったビットコインの投資チャレンジです。ビットコインの値段がガクッと下がった後、また上がりそうな勢いが出てきたタイミングで買ったり売ったりします。1時間ごとの値段の動きを見て、約1年間でどんな成績になったかを調べてみました。どんな考え方で動いて、結果はどうだったのか、分かりやすく説明しますね。
導入と前提条件
この作戦は、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)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでBTC/USDTのOHLCVを取得して前処理
- 『Ulcer Index Trend』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 158回 |
勝率 | 21.52% |
平均利益 | 4.11% |
平均損失 | -1.38% |
期待値 | -0.2% |
プロフィットファクター | 0.83 |
最大ドローダウン | 59.61% |
最終リターン | -31.78% |
シャープレシオ | -0.15 |
HODL(Buy&Hold) | 69.03% |
HODL戦略との比較
実装コード(Python)
"""
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この作戦がうまくいった確率は約21%と、ちょっと低めでした。計算上、続けると少しずつ損をしてしまう可能性が高い結果になりました。これは、作戦が考えていた「下がった後の勢い」が、思ったほどうまく働かなかったのかもしれません。
- 2158回も取引しましたが、結果として持っていたお金が約32%減ってしまいました。これは、たくさんの取引で少しずつ損が積み重なったか、いくつかの大きな失敗が原因だったと考えられます。
- 3稼いだお金(利益)と失ったお金(損失)を比べると、失ったお金の方が多かったようです。また、この期間はビットコインをただ持っているだけ(HODL)の方が、結果的に利益が出ていました。これは、ビットコインの値段が全体的に上がっていた時期だったからかもしれません。
この結果から学べる3つの教訓
- 1勝つ確率が低くても利益を出せる作戦はありますが、今回の作戦は、長い目で見ると損をしやすいタイプだということが分かりました。
- 2AIに自動で取引をまかせても、必ずうまくいくわけではないんですね。作戦の中身や、その時の世の中の状況によって、成績は大きく変わるということを学びました。
- 3一番大きく損をした時には、持っていたお金が半分以上も減ってしまいました(最大59.61%のマイナス)。これは、損が大きくなりすぎないようにするルールが、あまりうまく働かなかったことを示しているかもしれません。
リスク管理の具体的手法
取引量の決め方
一回の取引で使うお金は、持っているお金全部のうちの、ほんの一部(例えば100分の1とか)にしましょう。そうすれば、もし失敗しても、全体へのダメージは小さくてすみます。
損失が大きくなったときの対処法
もし損がどんどんふくらんで、持っているお金の1割がなくなってしまったら、その日は取引をやめる、といったルールを作っておくと、パニックになってさらに損をすることを防げます。
資金管理の方法
投資に使うお金は、なくなっても生活に困らないお金だけにしましょう。そして、もし利益が出たら、その一部は使わずに取っておくなど、賢くお金を管理することがとても大切です。
改良案の具体的提案
- 作戦で使っている「どれくらい落ち込んだらダメか」とか「どれくらいの期間の平均を見るか」といった数字の設定を、もっと細かく調整してみると、成績が良くなるかもしれません。
- 「買う」や「売る」のサインが出てもすぐに行動せず、例えば大事なニュースが出ているかなど、他の条件も見てから最終的に決めるようにすると、失敗が減るかもしれません。
- 一度の取引で使うお金の量を減らしたり、損がある金額を超えたらその日はお休みにするなど、もっと厳しいルールを作って、大きな失敗を防ぐ方法が考えられます。
実用性の向上(運用上の注意)
- この結果は、あくまでも過去のデータで試したものです。未来も同じようにうまくいくとは限りません。本当のお金を使う前に、必ずお試し用の取引(デモ取引)などで練習してください。
- 世の中の状況はいつも変わっています。この作戦がうまくいく時もあれば、うまくいかない時もあります。定期的に成績をチェックして、必要なら作戦の中身や設定を見直しましょう。
- AIの自動取引は便利ですが、全部おまかせにするのは危険です。自分でも世の中の動きを勉強して、最後は自分で判断できるようになることが、長く成功するためのカギですよ。
検証の透明性と信頼性
- データの出所: このレポートは、提供されたデータを使って作られています。
- 検証のやり方: 提供されたプログラムの設定を使って、過去のデータで「もしこの作戦を使っていたらどうなっていたか」をシミュレーションした結果です。
- コード: この作戦を動かすためのプログラム(コード)は、誰でも見られるようになっています。
- 注意事項: この情報は、投資をおすすめするものではありません。投資をするかどうかは、ご自身の判断でお願いします。過去の成績が、未来の利益を約束するわけではありません。