シェア:

AIが試した投資の作戦!「ATRトレーリングストップ」をわかりやすく解説します!

AIを使って、イーサリアム(ETH)という人気の仮想通貨で、ある投資の作戦をテストしてみました。使った作戦は「ATRトレーリングストップ」というものです。この作戦で、いつ買っていつ売ればもうかるのか、過去のデータで試した結果を、中学生にもわかるように説明しますね。

取引数
354
勝率
31.92%
最終リターン
-55.07%
最大DD
62.19%

導入と前提条件

AIを使って、イーサリアム(ETH)という人気の仮想通貨で、ある投資の作戦をテストしてみました。使った作戦は「ATRトレーリングストップ」というものです。この作戦で、いつ買っていつ売ればもうかるのか、過去のデータで試した結果を、中学生にもわかるように説明しますね。

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

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

ATR Trailing Stop の理論的背景

この作戦の基本的な考え方は、「上がり調子のときはできるだけ長く持ち続けて、下がり始めたらすぐに売って損を小さくする」というものです。逆に、下がり調子のときも同じです。「ATR」という、最近の値段がどれくらい激しく動いたかを示す数字を使います。この数字を参考にして、「この値段まで下がったら取引を終える」というラインを決めます。値段が自分に有利な方に動くと、このラインも一緒に追いかけてくれるので、利益を伸ばしやすくなるんです。

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

エントリー条件

  • 値段が、少し前の値段から、そのときの「値段の動きの大きさ」の2倍くらいグーンと上がったら、買うチャンス!と判断します。
  • 値段が、少し前の値段から、そのときの「値段の動きの大きさ」の2倍くらいガクンと下がったら、売るチャンス!と判断します。

エグジット条件

  • もし買っているときに、値段が下がってきて、決めておいた「ここまで下がったら終わり」というラインを割ってしまったら、取引を終わらせます。
  • もし売っているときに、値段が上がってきて、決めておいた「ここまで上がったら終わり」というラインを越えてしまったら、取引を終わらせます。

リスク管理

この作戦では、大きな損をしないように「ATRトレーリングストップ」の仕組みを使います。これは、もし予想と反対に値段が動いてしまったら、自動で取引をストップしてくれるルールです。これによって、一回の取引で失うお金を少なくできます。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数354回
勝率31.92%
平均利益2.46%
平均損失-1.44%
期待値-0.2%
プロフィットファクター0.77
最大ドローダウン62.19%
最終リターン-55.07%
シャープレシオ-0.08
HODL(Buy&Hold)76.3%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
#!/usr/bin/env python3
"""
ATRトレーリングストップ戦略
ATRを使った動的なトレーリングストップでトレンドフォロー
"""
import pandas as pd
import numpy as np


def calculate_atr_signals(df: pd.DataFrame, atr_period: int = 14, atr_multiplier: float = 2.0) -> pd.DataFrame:
    """
    ATRトレーリングストップシグナルを生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    atr_period : int
        ATR計算期間(デフォルト: 14)
    atr_multiplier : float
        ATR倍率(デフォルト: 2.0)
    
    Returns:
    --------
    pd.DataFrame
        シグナル列が追加されたDataFrame
    """
    df = df.copy()
    
    # True Rangeの計算
    df['high_low'] = df['high'] - df['low']
    df['high_close'] = np.abs(df['high'] - df['close'].shift(1))
    df['low_close'] = np.abs(df['low'] - df['close'].shift(1))
    df['true_range'] = df[['high_low', 'high_close', 'low_close']].max(axis=1)
    
    # ATRの計算
    df['atr'] = df['true_range'].rolling(window=atr_period).mean()
    
    # ATRトレーリングストップの計算
    df['atr_distance'] = df['atr'] * atr_multiplier
    
    # 上昇トレンドと下降トレンドのストップレベル
    df['upper_stop'] = df['close'] - df['atr_distance']
    df['lower_stop'] = df['close'] + df['atr_distance']
    
    # トレンド方向の判定(シンプルなロジック)
    df['trend'] = 0
    for i in range(atr_period, len(df)):
        if df.loc[df.index[i], 'close'] > df.loc[df.index[i-1], 'close'] + df.loc[df.index[i-1], 'atr_distance']:
            df.loc[df.index[i], 'trend'] = 1
        elif df.loc[df.index[i], 'close'] < df.loc[df.index[i-1], 'close'] - df.loc[df.index[i-1], 'atr_distance']:
            df.loc[df.index[i], 'trend'] = -1
        else:
            df.loc[df.index[i], 'trend'] = df.loc[df.index[i-1], 'trend']
    
    # シグナル生成(トレンド転換時)
    df['is_buy'] = (df['trend'] == 1) & (df['trend'].shift(1) != 1)
    df['is_sell'] = (df['trend'] == -1) & (df['trend'].shift(1) != -1)
    
    # NaN値をFalseに置換
    df['is_buy'] = df['is_buy'].fillna(False)
    df['is_sell'] = df['is_sell'].fillna(False)
    
    # デバッグ情報
    print(f"ATR期間: {atr_period}, 倍率: {atr_multiplier}")
    print(f"買いシグナル数: {df['is_buy'].sum()}")
    print(f"売りシグナル数: {df['is_sell'].sum()}")
    
    return df

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

  1. 1この作戦は、値段が上がり続けたり下がり続けたりする「トレンド」があるときに強いです。でも今回のテスト(354回取引しました)では、はっきりしたトレンドがあまりなく、値段が上がったり下がったりを繰り返す場面が多かったようです。そのため、何度も取引を繰り返してしまい、小さな損が積み重なって勝率が低くなったと考えられます。
  2. 2勝率が31.92%ということは、10回取引したら約7回は負けてしまったということです。負けが多かったので、最終的にはマイナス55.07%という残念な結果になってしまいました。
  3. 3もしこの仮想通貨をただずっと持っているだけ(ガチホ)だったら、76.3%のプラスになっていました。それと比べると、今回の作戦の成績は悪かったですね。これは、この作戦が、テストした期間のイーサリアムの動き方には合っていなかったということかもしれません。

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

  1. 1どんなに良さそうに見える作戦でも、市場の状況によってはうまくいかないことがある、ということを学びました。
  2. 2勝率が低くても、1回の勝ちでとても大きな利益を出せれば、全体ではプラスになることもあります。(今回は残念ながらそうはなりませんでしたが、そういう作戦もあるんだと知りました。)
  3. 3実際に自分のお金を使う前に、過去のデータでテストしてみることがすごく大事だとわかりました。そうすれば、その作戦がどんな特徴を持っているかを知ることができます。

リスク管理の具体的手法

取引量の決め方

1回の取引に、自分のお金の何パーセントまで使うか決めることです。例えば「全財産の2%まで」のようにルールを作れば、もし負けても大きなダメージを受けずにすみます。

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

もし負けが続いて、全体のお金がかなり減ってしまったら、一度取引をお休みするルールを決めておくことも大切です。これ以上損が大きくならないようにするためです。

資金管理の方法

取引に使うお金全体をどう管理するか、という考え方です。いくらまでなら損しても大丈夫か考えたり、もうかったお金の一部は貯金するなど、長い目で見てお金が減らないように工夫することです。

改良案の具体的提案

  • 損切りラインを決めるための倍率(今回は2倍)を変えてみると、結果が良くなるか試してみる価値はありそうです。
  • 値段の大きな流れ(トレンド)が強いときだけ取引するように、他のヒント(例えば移動平均線など)と組み合わせると、もっと勝てるタイミングが見つかるかもしれません。
  • イーサリアム以外の仮想通貨で試したり、5分ごとではなく1時間ごとなど、見る時間を変えたりして、この作戦がどんな場面で活躍するのか、もっと調べてみると良いでしょう。

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

  • この作戦は、値段の上がり下がりがはっきりしているときに力を発揮しやすいです。なので、市場全体の様子をよく見てから使うのがおすすめです。
  • 損切りラインを決めるための設定を変えるだけで、作戦の成績は大きく変わります。自分に合った設定を見つけるために、色々なパターンで試してみることが大切です。
  • AIのテスト結果は、あくまでも過去のデータでのお話です。未来でも同じようにうまくいくとは限りません。これを忘れないでくださいね。

検証の透明性と信頼性

  • データの出所: Pythonというプログラミング言語を使って、過去のイーサリアム(ETH/USDT)の値段のデータを使ってテストしました。
  • 検証のやり方: テストに使ったプログラムを動かして、決められた期間(2024年9月29日から2025年8月25日)のデータで、この作戦の成績を計算しました。
  • コード: このテストに使ったプログラムのコード(設計図)は、見ることができます。
  • 注意事項: この結果は、あくまで過去のデータでの話で、将来もうかることを約束するものではありません。投資には、お金が減ってしまうリスクもあります。必ず自分でよく考えて、自分の責任で行ってください。

よくある質問

Q.「ATRトレーリングストップ」って、どういう意味?

A.値段の動きの激しさに合わせて、「ここまで下がったら売る」という損切りラインを自動で動かしてくれる、賢い作戦のことだよ。

Q.「ETH/USDT」って何?

A.ETHはイーサリアムという仮想通貨で、USDTはアメリカドルと同じくらいの価値になるように作られた仮想通貨のこと。この2つを交換する取引のことだよ。

Q.「5m」って、どういう意味?

A.「5分足(ごふんあし)」のことだよ。5分間の値段の動きを1本の棒グラフで表していて、短い時間での取引の様子を見るときに使うんだ。

Q.「勝率31.92%」って、すごく低いね。もうからないの?

A.勝つ回数は少ないね。でも、1回勝ったときにすごく大きな利益が出れば、負けの分を取り返してプラスになることもあるんだ。ただ、今回のテストでは残念ながらマイナスになってしまったんだ。

Q.「最大DD:62.19%」って、ひどいことになってない?

A.これは「最大ドローダウン」といって、テスト期間中に資金が一番減ってしまったときの割合のことだよ。一番悪いときで、元のお金が62.19%も減ってしまった瞬間があった、ということなんだ。ちょっと怖い数字だね。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報