シェア:

イーサリアム(ETH)で挑戦!ある投資の作戦はうまくいったかな?

このお話は、「プロジェクション・オシレーター」という道具を使って、仮想通貨イーサリアム(ETH)をいつ買っていつ売るか、という作戦を試してみた結果レポートです。5分ごとの値動きを見て、2154回も取引しました。さあ、どうなったか見てみましょう!

取引数
2154
勝率
24.28%
最終リターン
-99.98%
最大DD
99.98%

導入と前提条件

このお話は、「プロジェクション・オシレーター」という道具を使って、仮想通貨イーサリアム(ETH)をいつ買っていつ売るか、という作戦を試してみた結果レポートです。5分ごとの値動きを見て、2154回も取引しました。さあ、どうなったか見てみましょう!

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

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

Projection Oscillator の理論的背景

この作戦の基本的な考え方は、「物の値段は、だいたい決まった範囲の中で上がったり下がったりすることが多い」というものです。そして、その範囲から大きくはみ出したり、端っこに近づいたりすると、また範囲の中に戻ってきやすい、という性質を使います。例えば、値段がすごく安くなったら(売られすぎ)、そろそろ上がるかも?と考えて買ってみたり、逆にすごく高くなったら(買われすぎ)、そろそろ下がるかも?と考えて売ってみたりします。

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

エントリー条件

  • 「値段の勢い」を示す線の数字が20より下だったのに、20をこえたら買う。
  • 「値段の勢い」を示す線が、その平均の線よりも下にあったのに、それを上回ったら買う。(ただし、勢いが50より弱いときだけです)

エグジット条件

  • 「値段の勢い」を示す線の数字が80より上だったのに、80を下回ったら売って取引を終える。
  • 「値段の勢い」を示す線が、その平均の線よりも上(勢いが50より強いとき)にあったのに、それを下回ったら売って取引を終える。

リスク管理

もし予想が外れても、大損しないためのルールが「損切り」です。「これ以上損したら、あきらめて売る」という値段をあらかじめ決めておきます。こうすることで、被害を最小限におさえることができます。一回で大儲けを狙うのではなく、小さな勝ちを積み重ねることを目指します。

再現手順(HowTo)

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

【結果】パフォーマンス

価格の推移

価格推移

資産の推移

資産推移

パフォーマンス指標

指標
総トレード数2154回
勝率24.28%
平均利益0.53%
平均損失-0.69%
期待値-0.39%
プロフィットファクター0.2
最大ドローダウン99.98%
最終リターン-99.98%
シャープレシオ-0.8
HODL(Buy&Hold)78.21%

HODL戦略との比較

HODL戦略との比較

実装コード(Python)

strategy.py
"""
Projection Oscillator Trading Signal Generator
価格投影バンドに基づくオシレーター
"""
import pandas as pd
import numpy as np


def calculate_projection_signals(df: pd.DataFrame,
                                period: int = 14,
                                smooth: int = 3) -> pd.DataFrame:
    """
    Projection Oscillator戦略のシグナル生成
    
    Parameters:
    -----------
    df : pd.DataFrame
        OHLCVデータ
    period : int
        投影期間(デフォルト: 14)
    smooth : int
        平滑化期間(デフォルト: 3)
    
    Returns:
    --------
    pd.DataFrame
        シグナルが追加されたDataFrame
    """
    df = df.copy()
    
    # 線形回帰による投影バンド
    df['period_high'] = df['high'].rolling(window=period).max()
    df['period_low'] = df['low'].rolling(window=period).min()
    
    # 投影上限と下限
    df['proj_upper'] = df['period_high']
    df['proj_lower'] = df['period_low']
    
    # 中心線
    df['proj_center'] = (df['proj_upper'] + df['proj_lower']) / 2
    
    # バンド幅
    df['proj_width'] = df['proj_upper'] - df['proj_lower']
    
    # Projection Oscillator(現在価格の相対位置)
    df['po_raw'] = ((df['close'] - df['proj_lower']) / (df['proj_width'] + 0.0001)) * 100
    
    # スムージング
    df['po'] = df['po_raw'].rolling(window=smooth).mean()
    
    # POの移動平均
    df['po_ma'] = df['po'].rolling(window=period).mean()
    
    # シグナル生成
    df['po_prev'] = df['po'].shift(1)
    df['is_buy'] = (
        ((df['po'] > 20) & (df['po_prev'] <= 20)) |  # 売られ過ぎからの反発
        ((df['po'] > df['po_ma']) & (df['po_prev'] <= df['po_ma']) & (df['po'] < 50))  # MAクロス(下半分)
    ) & df['po'].notna()
    df['is_sell'] = (
        ((df['po'] < 80) & (df['po_prev'] >= 80)) |  # 買われ過ぎからの反落
        ((df['po'] < df['po_ma']) & (df['po_prev'] >= df['po_ma']) & (df['po'] > 50))  # MAクロス(上半分)
    ) & df['po'].notna()
    
    # 不要カラム削除
    df.drop(['period_high', 'period_low', 'proj_upper', 'proj_lower', 'proj_center',
             'proj_width', 'po_raw', 'po_ma', 'po_prev'], axis=1, inplace=True, errors='ignore')
    
    return df

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

  1. 1勝った確率が約24%と低かったのは、たぶん「今がチャンス!」という合図が出たのに、すぐに値段が反対に動いてしまうことが多かったからだと思います。
  2. 2最終的に99.98%も損してしまったのは、勝ったときの儲けよりも、負けたときの一回の損がとても大きかったからだと考えられます。
  3. 3持っていたお金がほとんど無くなりそうになるくらい大きく損してしまったのは、「損切り」のルールがうまく働かなかったか、損切りするまでの値段の幅が大きすぎたのかもしれません。

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

  1. 1「今がチャンス!」という合図が出ても、その通りに値段が動くとは限らない、ということを学びました。
  2. 2何回勝ったか、という回数だけでなく、一回ごとの「勝ちの大きさ」と「負けの大きさ」のバランスが、最終的にプラスになるためにすごく大事だとわかりました。
  3. 3「これは良い作戦だ!」と思っても、実際にやってみるとうまくいかないことがあります。そして、なぜダメだったのかを考えることが、次に繋がるんだと学びました。

リスク管理の具体的手法

取引量の決め方

一回の取引で使うお金は、持っているお金全部ではなく、ほんの少し(例えば1000円持っていたら10円とか20円)だけにするルールです。もし負けても、ダメージが少なくてすみます。

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

もし損が続いて、持っているお金が一定の金額より減ってしまったら、「今日はもうやめよう」と取引をストップするルールを作ります。これで、ヤケになって大失敗するのを防げます。

資金管理の方法

持っているお金の管理方法です。取引に使うお金と、使わないお金をちゃんと分けておきます。もし儲かったら、その一部は使わずに取っておくなど、コツコツとお金を管理することが大切です。

改良案の具体的提案

  • 「買え」や「売れ」の合図が出た後、もし思った通りに値段が動かなかったら、すぐに取引をやめるという新しいルールを追加します。
  • 「値段の勢い」を見る道具だけでなく、他の道具(例えば、全体の流れが上がり調子か下がり調子かを見る道具など)も組み合わせて、もっと確実なチャンスのときだけ取引するようにします。
  • 損切りする値段の幅や、一回の取引に使うお金の量をしっかり決めて、大きな損をしないように、もっと厳しくルールを守るようにします。

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

  • この結果は、あくまで昔のデータで試したものです。未来も同じ結果になるとは限りません。
  • 本当に自分のお金で取引する前に、まずはゲームのお金で練習したり、すごく少ない金額で試したりすることがとても大事です。
  • 取引を始めた後も、ニュースを見たりして世の中の動きに気を配りましょう。もし状況が変わったら、作戦を変える勇気も必要です。

検証の透明性と信頼性

  • データの出所: このテストで使ったのは、イーサリアム(ETH)という仮想通貨の、5分ごとの実際の値段のデータです。
  • 検証のやり方: 昔の値段のデータを使って、この作戦通りに売買したら、いくら儲かったり損したりしたかをコンピューターで計算しました。
  • コード: この作戦をコンピューターにやらせるための命令文(プログラムコード)は、誰でも見られるように公開されています。
  • 注意事項: このレポートは、投資の勉強や研究のためのものです。これを読んで「よし、投資しよう!」とすぐに行動することはお勧めしません。投資は、自分の判断と責任で行うものです。昔うまくいったからといって、将来もうまくいくとは限りません。

よくある質問

Q.「プロジェクション・オシレーター」って、結局なに?

A.「値段が上がりすぎかな?下がりすぎかな?」を教えてくれる道具の一つです。ある時間の中の一番高い値段と一番安い値段の幅の中で、今の値段がどのへんにあるかを示してくれます。

Q.「勝率24.28%」って、どういうこと?

A.100回取引したら、勝てたのは約24回だけだった、ということです。残りの76回は負けてしまいました。

Q.「最大DD 99.98%」って、ヤバいの?

A.はい、ものすごくヤバいです。一番運が悪かったとき、持っていたお金がほとんど全部(99.98%)無くなりそうになった、ということです。

Q.じゃあ、この作戦はもう使えないの?

A.このままでは難しいですが、今回わかった失敗の原因を直す工夫をすれば、うまくいく作戦に生まれ変わる可能性はあります。

Q.仮想通貨の取引って、やっぱり難しい?

A.仕組みは少し難しいかもしれませんが、大丈夫です。こういうレポートを読んで勉強したり、最初は練習用のゲームで試したりすれば、誰でも少しずつ詳しくなれますよ。

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

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

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

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

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

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

Q.HODLとの比較結果は?

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

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

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

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

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

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

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

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

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

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

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

Q.改良の方向性は?

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

著者情報