みんなの「買いたい!」気持ちがわかる?「需要指数」で仮想通貨に挑戦!
仮想通貨の取引で「いつ買えばいいの?」「いつ売ればいいの?」と迷ったことはありませんか?「需要指数」という方法を使うと、市場のみんなの「買いたい!」という気持ちと「売りたい…」という気持ちのバランスを見ることができます。これによって、買うタイミングや売るタイミングを見つけやすくなるんです。今回は、ETHとUSDTという仮想通貨の組み合わせで、1時間ごとの値動きを分析してみました。
導入と前提条件
仮想通貨の取引で「いつ買えばいいの?」「いつ売ればいいの?」と迷ったことはありませんか?「需要指数」という方法を使うと、市場のみんなの「買いたい!」という気持ちと「売りたい…」という気持ちのバランスを見ることができます。これによって、買うタイミングや売るタイミングを見つけやすくなるんです。今回は、ETHとUSDTという仮想通貨の組み合わせで、1時間ごとの値動きを分析してみました。
【検証】戦略のバックテスト概要
- 戦略名: Demand Index を使用したトレンド追従戦略
- 対象銘柄: ETH/USDT
- 時間足: 1h
- 期間: 2025-02-19〜2025-08-25(186日間)
- 初期資金: $10,000
- 手数料・スリッページ: 0.1% / 0.1%
- 取引所: okx
Demand Index の理論的背景
この作戦の基本的な考え方は、市場の「買いの力」と「売りの力」のどちらが強いかに注目することです。例えば、値段が始まったときより終わったときの方が高ければ「買いの力が強い」、安ければ「売りの力が強い」と考えます。この2つの力のバランスを計算して、「需要指数」という数字を出します。この数字がプラスなら買いたい人が多く、マイナスなら売りたい人が多い、というしるしです。さらに、この指数のデコボコした動きをなめらかにした線も使って、値段の動きと指数の動きのズレがないかも見ます。これによって、より確かな売買のタイミングを探るんです。難しい計算というより、市場の「今の勢い」や「ムード」を数字で見えるようにしたもの、と考えると分かりやすいですよ。
具体的な売買ルール(今回の検証)
エントリー条件
- 「需要指数」がマイナスからプラスに変わったとき。これは、買いたい気持ちが強くなってきたサインです。
- 値段は下がっているのに「需要指数」は上がっているなど、値段の動きと指数の動きが逆になったとき。これは、これから値段が上がるかもしれない、という強い買いのサインです。
エグジット条件
- 「需要指数」がプラスからマイナスに変わったとき。これは、売りたい気持ちが強くなってきたサインです。
- 値段は上がっているのに「需要指数」は下がっているなど、値段の動きと指数の動きが逆になったとき。これは、これから値段が下がるかもしれない、という強い売りのサインです。
リスク管理
取引をするときは、もし失っても生活に困らないお金だけを使うことが大切です。そして、「損切り」というルールを決めておきましょう。これは、もし予想と反対に値段が大きく動いてしまったら、そこで取引をやめるというルールです。こうすることで、大きな損をしてしまうのを防ぐことができます。
再現手順(HowTo)
- Python/依存(ccxt, pandas, ta)をインストール
- ccxtでETH/USDTのOHLCVを取得して前処理
- 『Demand Index』に必要な指標を算出(ta 等)
- 閾値・クロス条件から売買シグナルを生成
- 手数料・スリッページを加味して検証・評価
【結果】パフォーマンス
価格の推移
資産の推移
パフォーマンス指標
指標 | 値 |
---|---|
総トレード数 | 436回 |
勝率 | 25.92% |
平均利益 | 2.07% |
平均損失 | -1.06% |
期待値 | -0.25% |
プロフィットファクター | 0.65 |
最大ドローダウン | 70.29% |
最終リターン | -68.95% |
シャープレシオ | -0.7 |
HODL(Buy&Hold) | 73.3% |
HODL戦略との比較
実装コード(Python)
"""
Demand Index Trading Signal Generator
価格と出来高の関係から需要を測定
"""
import pandas as pd
import numpy as np
def calculate_demand_index_signals(df: pd.DataFrame,
period: int = 5) -> pd.DataFrame:
"""
Demand Index戦略のシグナル生成
Parameters:
-----------
df : pd.DataFrame
OHLCVデータ
period : int
移動平均期間(デフォルト: 5)
Returns:
--------
pd.DataFrame
シグナルが追加されたDataFrame
"""
df = df.copy()
# 価格変化率
df['price_change'] = df['close'] / df['close'].shift(1) - 1
# ボリューム変化率
df['volume_change'] = df['volume'] / df['volume'].shift(1) - 1
# Buying Pressure(買い圧力)
df['bp'] = df['volume'] * np.where(df['close'] > df['open'],
(df['close'] - df['low']) / (df['high'] - df['low'] + 0.0001),
0)
# Selling Pressure(売り圧力)
df['sp'] = df['volume'] * np.where(df['close'] < df['open'],
(df['high'] - df['close']) / (df['high'] - df['low'] + 0.0001),
0)
# Demand Index
df['di_raw'] = (df['bp'] - df['sp']) / (df['bp'] + df['sp'] + 0.0001)
# スムージング
df['di'] = df['di_raw'].rolling(window=period).mean()
# DI変化率
df['di_change'] = df['di'] - df['di'].shift(1)
# 移動平均
df['di_ma'] = df['di'].rolling(window=period * 2).mean()
# ダイバージェンス検出
price_ma = df['close'].rolling(window=period).mean()
df['price_trend'] = (price_ma - price_ma.shift(period)) / price_ma.shift(period)
df['di_trend'] = (df['di'] - df['di'].shift(period)) / (np.abs(df['di'].shift(period)) + 0.0001)
df['divergence'] = df['price_trend'] * df['di_trend']
# シグナル生成
df['di_prev'] = df['di'].shift(1)
df['is_buy'] = (
((df['di'] > 0) & (df['di_prev'] <= 0)) | # ゼロラインクロス
((df['di'] > df['di_ma']) & (df['divergence'] < -0.1)) # 強気ダイバージェンス
) & df['di'].notna()
df['is_sell'] = (
((df['di'] < 0) & (df['di_prev'] >= 0)) | # ゼロラインクロス
((df['di'] < df['di_ma']) & (df['divergence'] < -0.1)) # 弱気ダイバージェンス
) & df['di'].notna()
# 不要カラム削除
df.drop(['price_change', 'volume_change', 'bp', 'sp', 'di_raw', 'di_change',
'di_ma', 'price_trend', 'di_trend', 'divergence', 'di_prev'], axis=1, inplace=True, errors='ignore')
return df
なぜこの結果になったのか(3つの理由)
- 1今回の取引では、勝てたのは4回に1回くらい(勝率 約26%)でした。つまり、多くの取引で負けてしまった、ということです。
- 2儲かった取引の合計金額よりも、損した取引の合計金額の方が大きくなってしまいました。全体として利益を出すのが難しい結果だったことがわかります。
- 3最終的に、最初のお金が約69%も減ってしまいました。また、一番うまくいかなかった時期には、お金が最大で70%も減ってしまったことがありました。これも、この作戦の難しいところです。
この結果から学べる3つの教訓
- 1たとえ負ける回数が多くても、1回勝ったときに大きく儲けることができれば、全体ではプラスになることもある、ということを学びました。でも、今回はそれがうまくいきませんでした。
- 2「需要指数」が、必ずしも値段の未来を当てられるわけではないこと、そして、市場の状況によっては、この方法がうまくいかない時もある、ということが分かりました。
- 3たった一つのルールに頼るのではなく、市場の状況に合わせてやり方を変えたり、他の分析方法と組み合わせたりすることが大切だと感じました。
リスク管理の具体的手法
取引量の決め方
1回の取引で使うお金は、持っているお金全体の1%から2%くらい(100分の1か2)にしましょう。こうすれば、もし何回か負けても、すぐにお金が全部なくなってしまうことはありません。
損失が大きくなったときの対処法
もし持っているお金が思ったより減ってしまったら、一度取引をお休みしたり、取引に使う金額を減らしたりしましょう。焦って変な判断をしないために、冷静になることがとても大事です。
資金管理の方法
投資に使うお金と、普段の生活で使うお金は、きちんと分けて管理しましょう。また、「いくら儲かったらやめる」「いくら損したらやめる」という目標を最初に決めておくと、計画的に取引を進められます。
改良案の具体的提案
- 売買のタイミングを決めるときに、他の分析ツールも一緒に見て、条件を増やすこと。
- 「需要指数」を計算するときに使う数字(期間など)を変えてみて、もっと良い結果が出ないか試してみること。
- 利益が出ているときはなるべくそれを伸ばし、損が出始めたらすぐに取引をやめる(損切りする)など、取引ごとのルールをもう少し細かく決めること。
実用性の向上(運用上の注意)
- この作戦は、あくまで考え方の一つです。必ず自分の目で実際の市場の動きを確かめながら取引してくださいね。
- いきなり大きなお金で取引するのはやめましょう。まずは少額や、練習用の取引(デモ取引)で試してみて、慣れてきたら少しずつ金額を増やしていくのがおすすめです。
- 世の中のニュースや、他の仮想通貨がどうなっているかなども気にすると、もっと良い判断ができるようになるかもしれません。
検証の透明性と信頼性
- データの出所: この分析には、過去のETH/USDTの1時間ごとの値段のデータ(始まりの値段、一番高かった値段、一番安かった値段、終わりの値段)と、取引された量を使いました。
- 検証のやり方: ここに書いてある成績は、「もしこのルールで昔から取引していたらどうなっていたか」をコンピューターで計算(シミュレーション)した結果です。
- コード: この作戦を計算して、売買のタイミングを見つけるためのプログラムも公開されています。これを使えば、自分で同じ計算を試すこともできます。
- 注意事項: このお話は、投資の勉強や研究のためのもので、将来必ず儲かることを保証するものではありません。仮想通貨の取引には危険がともない、投資したお金がなくなってしまう可能性もあります。投資をするかどうかは、最後は必ずご自身の責任で判断してください。