草コインのポンプ後の暴落を捉える方法:体系的アプローチ
すべての暗号資産トレーダーは、少なくとも一度はこの光景を目にしたことがあるだろう。昨日まで誰も聞いたことのないトークンが、4時間で+800%を記録する。Twitterはロケット絵文字で溢れかえる。Redditには「これはまだ始まりに過ぎない」という投稿が現れる。1ヶ月前にオーダーブックとマクドナルドの注文の区別もつかなかった同僚が「とりあえず100ドルだけでも入れとけ」とメッセージを送ってくる。12時間後、トークンはピークから85%下落。静寂。ロケットは削除済み。
問題は暴落が起きるかどうかではない。問題は、ポンプそのものに巻き込まれずに、いかに体系的に利益を得るかだ。
本記事は投資助言ではない(誰も読まないが弁護士が主張する義務的免責事項)。低流動性資産のインパルス的な動きの後の反転ポイントを特定するための、メカニクス、シグナル、アルゴリズムに関する技術的な分析である。
ポンプ&ダンプの解剖学:ひとつの狂騒の三段階
ショートを仕掛ける前に、この現象の構造を理解する必要がある。草コインのすべてのポンプ&ダンプは三つの段階を経て進行し、各段階にはデータ上の特徴的なシグネチャがある。

フェーズ1:集積(静かな狩り)
所要時間:数時間から数日。
誰か——インサイダーグループ、組織的なTelegramグループ、あるいは単に情報優位を持つ大口プレイヤー——がトークンの買い集めを始める。慎重に行われる:少額注文で、複数の取引所を通じて、多くの場合アジアセッション中(流動性が最も低く、注目が散漫なとき)に。
データで確認できること:
- 取引量が徐々に増加(過去7日間の平均より50-200%高い)しているが、価格はほとんど動かない
- 買い板が厚くなる:現在価格の2-5%下に「壁」が出現
- オンチェーン指標(DEXトークンの場合):取引所への大口送金、ユニークな買い手ウォレット数の増加
- パーペチュアル先物のファンディングレート(存在する場合)がわずかに上昇し始める
このフェーズでショートするのは時期尚早だ。これが集積なのか有機的な需要なのか、まだ分からない。両者の区別はしばしば不可能で、違いは後になって初めて明らかになる。
フェーズ2:インパルス(パーティー)
所要時間:30分から12時間。
価格が主要なレジスタンスレベルを突破し、カスケードが始まる。ショート勢のストップロスが清算される。FOMO(Fear Of Missing Out)が個人トレーダーを巻き込む。クリプトTwitterはエコーチェンバーと化す。リツイートの一つ一つが新しい50倍レバレッジのロングポジションだ。
特徴的なシグネチャ:
- 出来高が平均の1000-5000%(誤植ではない)
- ファンディングレートが8時間あたり0.1-0.5%に急騰(通常は0.01%)
- 建玉残高(Open Interest)が指数関数的に増加:新規ポジションの開設速度がクローズ速度を上回る
- ビッド・アスクスプレッドがアスク側の流動性不足で3-10倍に拡大
- 板に上方の真空地帯:現在価格と最寄りの大口アスクの間が空洞
このフェーズでショートするのは自殺行為だ。 「いつかは止まるだろう」と言って列車の前に立つようなものだ。確かに止まる。だがその時には、あなたはすでに清算されている。詳しくは下記「やってはいけないこと」セクションで。
フェーズ3:ディストリビューションと暴落(二日酔い)
所要時間:2時間から48時間。
インサイダーが利益確定を始める。価格が最初の意味のある調整(ピークから-15-30%)を行う。個人トレーダーが「ディップを買う」。価格が反発する。そしてまた下落する。次の反発はより弱く。次の下落はより深く。
データで起きていること:
- 出来高は高いまま維持されるが、売り側にシフト
- ファンディングレートが低下し始めるが、まだ異常に高い
- 建玉残高の増加が止まるか、減少し始める(ロングのクローズ)
- 大口の成行売り注文が出現し、板を数段階「食い破る」
- オンチェーン:インサイダーのウォレットから取引所への大口送金
ここがハンティングゾーンだ。 ここから本格的な作業が始まる。
ショートエントリーの主要シグナル
各シグナル単独では弱い。3つ以上の組み合わせで初めて実行可能な仮説となる。

1. ファンディングレート:貪欲への課税
ファンディングレートとは、パーペチュアル先物でポジションを維持するコストのことだ。全員がロングしたいとき、ロング側がショート側に支払う。レートが高いほど、市場は一方向に偏っている。
| ファンディングレート(8時間あたり) | 解釈 | アクション |
|---|---|---|
| 0.01% | 通常 | なし |
| 0.03-0.05% | ロング需要の増加 | 観察 |
| 0.05-0.1% | 強い偏り | ショートの準備 |
| 0.1-0.3% | 極端な偏り | 積極的にエントリーを探す |
| > 0.3% | 狂気 | 確認後にショート |
なぜ機能するか: 8時間あたり0.3%のファンディングレートでは、ロング勢はポジション維持だけで1日約1%を支払う。10倍レバレッジでは1日に資金の10%だ。こんな状態は長くは続かない——ポジションが閉じ始め、価格を押し下げる。
注意点: 極端なファンディングそのものはショートシグナルではない。価格が上昇し続ける間、数時間から数日間高水準を維持することもある。ファンディングはフィルター(偏りの確認)であり、トリガー(エントリーポイント)ではない。
def funding_rate_signal(
current_rate: float,
historical_rates: list[float],
lookback: int = 90, # 90期間 = 30日
) -> dict:
"""
現在のファンディングレートの異常度を評価。
Returns:
signal: 'neutral' | 'elevated' | 'extreme' | 'insane'
z_score: float — 正常値からの乖離
percentile: float — ヒストリカルデータにおけるパーセンタイル
"""
import numpy as np
hist = np.array(historical_rates[-lookback:])
mean = hist.mean()
std = hist.std()
z_score = (current_rate - mean) / std if std > 0 else 0
percentile = np.searchsorted(np.sort(hist), current_rate) / len(hist)
if z_score > 4:
signal = 'insane'
elif z_score > 3:
signal = 'extreme'
elif z_score > 2:
signal = 'elevated'
else:
signal = 'neutral'
return {
'signal': signal,
'z_score': round(z_score, 2),
'percentile': round(percentile, 4),
'annualized_cost': round(current_rate * 3 * 365 * 100, 1), # 年率(%)
}
2. 建玉残高(Open Interest):誰が罠にかかっているか
建玉残高(OI)とは、先物における未決済契約の総数だ。OIが価格と共に上昇する場合、新たな参加者が市場に入っている(主にロング)。価格が下落し始めてもOIが高止まりしている場合、それらのロングは罠にかかっている。彼らの清算がダンプの燃料となる。
主要パターン:
| 価格 | OI | 解釈 |
|---|---|---|
| 上昇 | 上昇 | 新規ロングが参入(ポンプ進行中) |
| 上昇 | 下落 | ショートがクローズ(ショートスクイーズ) |
| 下落 | 高水準 | ロングが罠にかかっている(ダンプのポテンシャル) |
| 下落 | 下落 | ロングがクローズ(ダンプ進行中) |
ロングにとって最も危険で、ショートにとって最適な瞬間: 価格が下落し始めたが、OIはまだ最大値にある。これは未決済のロングがまだクローズされていないことを意味する——反発を期待しているのだ。その期待が尽きたとき、清算カスケードが始まる。
def oi_divergence_signal(
prices: list[float],
oi_values: list[float],
window: int = 12, # 12本のローソク足(例:12 × 5分 = 1時間)
) -> dict:
"""
価格/OIのダイバージェンスを検出。
強気のOIダイバージェンス:価格下落中にOI高水準 — ロングが罠にかかっている。
"""
import numpy as np
recent_prices = np.array(prices[-window:])
recent_oi = np.array(oi_values[-window:])
price_change = (recent_prices[-1] - recent_prices[0]) / recent_prices[0]
oi_change = (recent_oi[-1] - recent_oi[0]) / recent_oi[0]
oi_at_peak = recent_oi[-1] > np.percentile(oi_values, 90)
price_declining = price_change < -0.03 # 価格が3%以上下落
trapped_longs = oi_at_peak and price_declining
if len(oi_values) > window * 2:
oi_velocity = oi_change / max(abs(price_change), 0.001)
else:
oi_velocity = 0
return {
'trapped_longs': trapped_longs,
'oi_percentile': round(
np.searchsorted(np.sort(oi_values), recent_oi[-1]) / len(oi_values), 2
),
'price_change': round(price_change * 100, 2),
'oi_change': round(oi_change * 100, 2),
'oi_velocity': round(oi_velocity, 2),
}
3. 出来高分析:ティックの中の真実
出来高は唯一偽装できない市場指標だ(まあ、ほぼ——一部の取引所でのウォッシュトレーディングはまだ現実だが、主要な取引所ではかなり改善された)。
ショートのシグナル:
上昇時の出来高減少。 弱さの古典的なシグナル。価格が新高値を更新するが、その動きの出来高は前回より少ない。買い手が息切れしている。
下落時の出来高急増。 -10%の調整が、直近の上昇インパルスの出来高を超える出来高で発生した場合、売り手が主導権を握ったことを意味する。
低出来高のフェイクブレイクアウト。 価格がローカル高値を突破するが、ブレイクアウト時の出来高は平均の2-3分の1。これは買い手への罠:価格はすぐに戻る。
def volume_exhaustion_signal(
candles: list[dict], # [{open, high, low, close, volume, timestamp}, ...]
pump_start_idx: int,
) -> dict:
"""
ポンプ後の出来高枯渇分析。
"""
import numpy as np
pump_candles = candles[pump_start_idx:]
up_candles = [c for c in pump_candles if c['close'] > c['open']]
down_candles = [c for c in pump_candles if c['close'] <= c['open']]
if not up_candles or not down_candles:
return {'signal': 'insufficient_data'}
avg_up_vol = np.mean([c['volume'] for c in up_candles])
avg_down_vol = np.mean([c['volume'] for c in down_candles])
up_volumes = [c['volume'] for c in up_candles]
if len(up_volumes) >= 3:
first_half = np.mean(up_volumes[:len(up_volumes)//2])
second_half = np.mean(up_volumes[len(up_volumes)//2:])
volume_degradation = (second_half - first_half) / first_half
else:
volume_degradation = 0
all_volumes = np.array([c['volume'] for c in candles])
vol_mean = all_volumes[:-len(pump_candles)].mean() if len(candles) > len(pump_candles) else all_volumes.mean()
vol_std = all_volumes[:-len(pump_candles)].std() if len(candles) > len(pump_candles) else all_volumes.std()
current_z = (pump_candles[-1]['volume'] - vol_mean) / vol_std if vol_std > 0 else 0
return {
'sell_buy_volume_ratio': round(avg_down_vol / max(avg_up_vol, 1), 2),
'volume_degradation_pct': round(volume_degradation * 100, 1),
'current_volume_z_score': round(current_z, 2),
'signal': 'exhaustion' if volume_degradation < -0.3 else 'active',
}
4. ローソク足パターン:いまだに機能する古典的手法
そう、ローソク足分析は17世紀、本間宗久と米先物にまで遡る。そう、YouTubeの「ローソク足戦略」の90%はゴミだ。しかしポンプ後の5分足と15分足のタイムフレームでは、特定のパターンが統計的に有意な予測力を持つ。理由は単純:それらは実際のマイクロストラクチャー——買い手から売り手へのコントロールの移行を反映しているからだ。
追跡すべきパターン:
| パターン | 説明 | ポンプ後の信頼性 |
|---|---|---|
| 流れ星 (Shooting Star) | 長い上ヒゲ、下部に小さな実体 | 高 |
| 弱気の包み足 (Bearish Engulfing) | 陰線が前の陽線を完全に包む | 高 |
| 宵の明星 (Evening Star) | 3本:大陽線 -> 小さな足(十字線) -> 大陰線 | 非常に高 |
| トウバ (Gravestone Doji) | 始値 = 終値が下部、長い上ヒゲ | 中 |
| 三羽烏 (Three Black Crows) | 3本連続の陰線で終値が段階的に低下 | 高(確認用) |
極めて重要: コンテキストのないパターンはノイズだ。ランダムな調整での流れ星は何の意味もない。異常なファンディングレートとOIダイバージェンスを伴うポンプのピークでの流れ星——それはまったく別の話だ。
def detect_reversal_patterns(
candles: list[dict],
min_upper_shadow_ratio: float = 2.0, # 上ヒゲ > 実体の2倍(流れ星の条件)
) -> list[dict]:
"""
弱気の反転パターンを検出。
"""
signals = []
for i in range(2, len(candles)):
c = candles[i]
body = abs(c['close'] - c['open'])
upper_shadow = c['high'] - max(c['close'], c['open'])
lower_shadow = min(c['close'], c['open']) - c['low']
total_range = c['high'] - c['low']
if total_range == 0:
continue
if (upper_shadow > body * min_upper_shadow_ratio
and lower_shadow < body * 0.5
and c['close'] < c['open']): # 弱気
signals.append({
'pattern': 'shooting_star',
'index': i,
'timestamp': c['timestamp'],
'strength': upper_shadow / total_range,
})
prev = candles[i - 1]
if (prev['close'] > prev['open'] # 前の足は陽線
and c['close'] < c['open'] # 現在の足は陰線
and c['open'] > prev['close'] # 始値が前の終値より高い
and c['close'] < prev['open']): # 終値が前の始値より低い
signals.append({
'pattern': 'bearish_engulfing',
'index': i,
'timestamp': c['timestamp'],
'strength': body / (abs(prev['close'] - prev['open']) + 1e-10),
})
if i >= 2:
c1 = candles[i - 2]
c2 = candles[i - 1]
c3 = candles[i]
c1_body = abs(c1['close'] - c1['open'])
c2_body = abs(c2['close'] - c2['open'])
c3_body = abs(c3['close'] - c3['open'])
if (c1['close'] > c1['open'] # 1本目は陽線
and c2_body < c1_body * 0.3 # 2本目は小さい(十字線)
and c3['close'] < c3['open'] # 3本目は陰線
and c3_body > c1_body * 0.5 # 3本目は十分に大きい
and c3['close'] < c1['close']): # 3本目の終値が1本目の終値より低い
signals.append({
'pattern': 'evening_star',
'index': i,
'timestamp': c['timestamp'],
'strength': c3_body / c1_body,
})
return signals
5. VWAP:現実のアンカー
VWAP(出来高加重平均価格)は出来高で加重された平均価格だ。ポンプ開始点からのアンカードVWAPは、インパルス期間中に購入した全参加者の平均エントリー価格を示す。
なぜ重要か: 価格がアンカードVWAPを下回ると、平均的な買い手が含み損になる。心理的なプレッシャーが高まる。ポンプの初期に「安く」買った人は利益確定を始める。ピークで買った人はパニック状態だ。
ルール: 出来高増加を伴うアンカードVWAPの下方ブレイクは、ショートまたはポジション追加の強いシグナルだ。
def anchored_vwap(
candles: list[dict],
anchor_idx: int,
) -> list[float]:
"""
指定ポイント(ポンプ開始点)からのアンカードVWAPを計算。
"""
vwap_values = []
cum_vol = 0
cum_vol_price = 0
for i in range(anchor_idx, len(candles)):
c = candles[i]
typical_price = (c['high'] + c['low'] + c['close']) / 3
cum_vol += c['volume']
cum_vol_price += typical_price * c['volume']
vwap = cum_vol_price / cum_vol if cum_vol > 0 else typical_price
vwap_values.append(vwap)
return vwap_values
6. 清算カスケード:ドミノ効果
これはダンプの最も強力なメカニズムであり、ショーターにとって最も収益性の高いものだ。ロジックはシンプル:
- トレーダーが20倍レバレッジでロングを開く。価格が5%下落すると清算される。
- 価格が5%下落。ポジションが清算される——取引所が成行で売却。
- 成行売りが価格をさらに下げる。次のトレーダーの清算を引き起こす。
- これが連鎖する。カスケード。

事前に察知する方法:
CoinGlass清算ヒートマップは清算レベルがどこに集中しているかを表示する。現在価格の下方に清算の「壁」が見える場合、そのレベルまでの下落は高確率でカスケードを引き起こす。
| ツール | 表示内容 | URL |
|---|---|---|
| CoinGlassヒートマップ | 価格チャート上の清算レベル | coinglass.com/liq/BTC |
| CoinGlass OI | 取引所別の建玉残高 | coinglass.com/open-interest |
| CoinGlassファンディング | 取引所別のファンディングレート | coinglass.com/funding-rate |
| Coinalyze | OI + 出来高 + 清算 | coinalyze.net |
| Hyblock Capital | 清算レベル | hyblock.co |
カスケードシグナル: 現在価格から-5%~-15%のゾーンに500万ドル以上の清算が集中している場合(日次出来高5000万~2億ドルの草コインの場合)、カスケードが発生する可能性が高い。
実践的アルゴリズム:フィルター -> エントリー -> リスク管理
理論は素晴らしい。さて、パイプラインだ。
ステップ1:フィルタリング(スキャナー)
数千のトークンから、ポストポンプフェーズにあるものを選別する必要がある。基準:
def pump_scanner(
symbols: list[str],
exchange, # ccxt exchange instance
lookback_hours: int = 24,
min_pump_pct: float = 100, # ルックバック期間で最低+100%
min_volume_z: float = 3, # 出来高のZ-score > 3
) -> list[dict]:
"""
ポストポンプフェーズにあるトークンのスキャナー。
"""
import numpy as np
candidates = []
for symbol in symbols:
try:
candles = exchange.fetch_ohlcv(symbol, '1h', limit=168) # 7日間
if len(candles) < 168:
continue
closes = [c[4] for c in candles]
volumes = [c[5] for c in candles]
recent_closes = closes[-lookback_hours:]
max_price = max(recent_closes)
min_price_before = min(closes[:-lookback_hours]) if len(closes) > lookback_hours else closes[0]
pump_pct = (max_price - min_price_before) / min_price_before * 100
current_price = closes[-1]
drawdown_from_peak = (current_price - max_price) / max_price * 100
vol_baseline = np.mean(volumes[:-lookback_hours])
vol_std = np.std(volumes[:-lookback_hours])
vol_recent = np.mean(volumes[-lookback_hours:])
vol_z = (vol_recent - vol_baseline) / vol_std if vol_std > 0 else 0
if pump_pct >= min_pump_pct and vol_z >= min_volume_z:
candidates.append({
'symbol': symbol,
'pump_pct': round(pump_pct, 1),
'drawdown_from_peak': round(drawdown_from_peak, 1),
'volume_z_score': round(vol_z, 2),
'current_price': current_price,
'peak_price': max_price,
})
except Exception:
continue
candidates.sort(key=lambda x: x['drawdown_from_peak'], reverse=True)
return candidates
ステップ2:シグナルの収束(スコアリング)
各候補について、6つのパラメータすべてで評価する:
def confluence_score(
funding_signal: dict,
oi_signal: dict,
volume_signal: dict,
pattern_signals: list[dict],
vwap_position: float, # 価格 / VWAP(< 1 = VWAPを下回る)
liquidation_density: float, # 現在価格下方の清算量(百万ドル)
) -> dict:
"""
ショートエントリーのための複合スコア。
スコア0-6、各ファクター = 0または1ポイント。
"""
score = 0
reasons = []
if funding_signal['signal'] in ('extreme', 'insane'):
score += 1
reasons.append(f"Funding z-score: {funding_signal['z_score']}")
if oi_signal['trapped_longs']:
score += 1
reasons.append(f"Trapped longs: OI percentile {oi_signal['oi_percentile']}")
if volume_signal['signal'] == 'exhaustion':
score += 1
reasons.append(f"Volume degradation: {volume_signal['volume_degradation_pct']}%")
strong_patterns = [p for p in pattern_signals if p['strength'] > 0.6]
if strong_patterns:
score += 1
reasons.append(f"Pattern: {strong_patterns[-1]['pattern']}")
if vwap_position < 0.98: # 価格がVWAPを2%以上下回る
score += 1
reasons.append(f"Below VWAP: {round((1 - vwap_position) * 100, 1)}%")
if liquidation_density > 5: # 500万ドル以上の清算
score += 1
reasons.append(f"Liquidation density: ${liquidation_density}M")
if score >= 4:
action = 'strong_short'
elif score >= 3:
action = 'short'
elif score >= 2:
action = 'watch'
else:
action = 'skip'
return {
'score': score,
'max_score': 6,
'action': action,
'reasons': reasons,
}
ステップ3:エントリーとリスク管理
エントリー:
- スコア >= 4:ポジションの50%でエントリー
- スコア = 3:ポジションの25%でエントリー
- スコア < 3:待機
ストップロス:
- 直近のスイングハイの上方 + 1-2%のバッファー
- タイトなストップはNG。草コインのボラティリティに殺される。エントリーから最低5-10%。
- スコア = 6の場合、8-12%のストップが許容される(確信度が高い = ストップは広く、ただしレバレッジは低く)
テイクプロフィット:
- TP1(ポジションの50%):次の主要サポートレベルまたはエントリーから-20%
- TP2(ポジションの30%):ポンプ開始時のVWAP
- TP3(ポジションの20%):ポンプ前の価格水準
ポジションサイズ:
資金10,000ドル、1トレードあたりのリスク2%、ストップ8%の場合:
3倍レバレッジの場合:200ドル(資金の2%)のリスクで、500~1,250ドルの潜在利益(TP1-TP3)を狙う。
最大レバレッジ:3-5倍。 それ以上は絶対NG。本気で言っている。草コインはポンプフェーズで「すべてのインジケーターがショートと言った」後にさらに+50%する可能性がある。高レバレッジ = 清算。
やってはいけないこと:5つの大罪
1. ポンプ中にショートしない
「絶対に下がる!」——はい、下がる。でもいつ? +200%でショートに入り、+150%に下がる前に+600%まで上昇した場合、+450%の時点で清算されている。テクニカル的には正しかった。実践的には破産だ。
ルール: 最初の明確な調整(ピークから-15%以上)と反転構造の形成後にのみエントリーすること。
2. タイトなストップロスを使わない
ATR 15%の草コインに2%のストップロスは、リスク管理ではない——マーケットメイカーへの寄付だ。次のボラティリティ急変動で数分以内にストップが刈られる。
ルール: ストップロス >= 現在のタイムフレームのATRの1.5倍。理想的には2倍。
3. 一つのトレードにすべてを賭けない
スコア6/6でも、成功確率は約65-70%だ。つまり10回中3回は負けトレード。毎回資金の10%を賭ければ、3連敗で-30%のドローダウン。心理的にそこから先はさらに悪いトレードをすることになる。
ルール: 1トレードあたり資金の1-2%。極端に確信がある場合でも最大5%。
4. 流動性を無視しない
あなたはゴールドマン・サックスではない。トークンの日次出来高が200万ドルで、5万ドルでエントリーしようとしているなら、あなた自身がマーケットイベントになる。あなたのエントリーが価格を動かし、あなたのエグジットも価格を動かす。スリッページが全利益を食い尽くす。
ルール: ポジションサイズ <= トークンの日次出来高の1%。
5. ショート機能のない現物市場でショートしない
当たり前に聞こえるが、DEXでインバーストークンを買ったり「安く買い戻すつもりで現物を売る」ことで「ショート」する人の数は驚くほど多い。適切な流動性のある取引所の先物を使うこと。さもなければショートしないこと。
モニタリングツール
CoinGlass (coinglass.com)
先物分析の主要ツール:
- 清算ヒートマップ: 価格チャート上の清算レベルの可視化
- ファンディングレート: 取引所間のファンディングレートをリアルタイムで比較
- 建玉残高: 取引所別の集計OI
- ロング/ショート比率: ロングとショートの比率(アカウント数別、出来高別)
Coinalyze (coinalyze.net)
デリバティブの深掘り分析:
- 集計OI: 取引所別に分解した統合建玉残高
- 清算: ロング/ショート別の清算履歴
- OI加重ファンディングレート: 各取引所のシェアを考慮したより正確なファンディングレート
TradingView (tradingview.com)
チャート分析用:
- Pine Scriptによるローソク足パターンの自動化
- アンカードVWAP(内蔵ツール)
- コミュニティインジケーターを通じたCoinGlassデータの統合
Laevitas (laevitas.ch)
プロフェッショナル向けデリバティブターミナル:
- ガンマエクスポージャー
- オプションフロー
- ストライク別OIヒートマップ
AIエージェントによる自動化
上記のすべてを自動化することが可能であり、またそうすべきだ。以下は検出システムのアーキテクチャ:
import asyncio
import numpy as np
from dataclasses import dataclass
from enum import Enum
class AlertLevel(Enum):
WATCH = "watch"
PREPARE = "prepare"
ENTRY = "entry"
@dataclass
class PumpDumpAlert:
symbol: str
level: AlertLevel
score: int
reasons: list[str]
suggested_entry: float | None
suggested_stop: float | None
suggested_tp: list[float]
timestamp: float
class PumpDumpDetector:
"""
ポストポンプダンプを検出するAIエージェント。
パイプライン:
1. スキャン:出来高Z-score > 3 + 価格上昇 > 100%
2. フィルタリング:ファンディングスパイク + OI増加
3. 待機:5m/15mでの反転パターン
4. アラート:スコアリング -> 通知
"""
def __init__(
self,
exchange,
symbols: list[str],
volume_z_threshold: float = 3.0,
funding_z_threshold: float = 2.0,
min_pump_pct: float = 80.0,
scan_interval_sec: int = 60,
):
self.exchange = exchange
self.symbols = symbols
self.volume_z_threshold = volume_z_threshold
self.funding_z_threshold = funding_z_threshold
self.min_pump_pct = min_pump_pct
self.scan_interval_sec = scan_interval_sec
self.active_watches: dict[str, dict] = {}
async def scan_loop(self):
"""メインスキャンループ。"""
while True:
candidates = await self._broad_scan()
for candidate in candidates:
symbol = candidate['symbol']
if symbol not in self.active_watches:
self.active_watches[symbol] = {
'first_seen': asyncio.get_event_loop().time(),
'pump_peak': candidate['peak_price'],
'pump_start_approx': candidate.get('pump_start_price'),
}
await self._emit_alert(PumpDumpAlert(
symbol=symbol,
level=AlertLevel.WATCH,
score=0,
reasons=[f"Pump detected: +{candidate['pump_pct']}%"],
suggested_entry=None,
suggested_stop=None,
suggested_tp=[],
timestamp=asyncio.get_event_loop().time(),
))
analysis = await self._deep_analysis(symbol)
if analysis['score'] >= 3:
entry = candidate['current_price']
stop = candidate['peak_price'] * 1.02 # ピークの2%上
await self._emit_alert(PumpDumpAlert(
symbol=symbol,
level=AlertLevel.ENTRY if analysis['score'] >= 4 else AlertLevel.PREPARE,
score=analysis['score'],
reasons=analysis['reasons'],
suggested_entry=entry,
suggested_stop=stop,
suggested_tp=[
entry * 0.80, # TP1: -20%
entry * 0.65, # TP2: -35%
entry * 0.50, # TP3: -50%
],
timestamp=asyncio.get_event_loop().time(),
))
current_time = asyncio.get_event_loop().time()
self.active_watches = {
s: d for s, d in self.active_watches.items()
if current_time - d['first_seen'] < 48 * 3600
}
await asyncio.sleep(self.scan_interval_sec)
async def _broad_scan(self) -> list[dict]:
"""全シンボルの簡易スキャン。"""
...
async def _deep_analysis(self, symbol: str) -> dict:
"""
特定シンボルの深掘り分析。
6つのシグナルすべてを収集し、収束スコアを計算。
"""
funding = await self._get_funding_signal(symbol)
oi = await self._get_oi_signal(symbol)
volume = await self._get_volume_signal(symbol)
patterns = await self._get_pattern_signals(symbol, timeframe='5m')
vwap_pos = await self._get_vwap_position(symbol)
liq_density = await self._get_liquidation_density(symbol)
return confluence_score(
funding, oi, volume, patterns, vwap_pos, liq_density
)
async def _emit_alert(self, alert: PumpDumpAlert):
"""アラート送信(Telegram、webhookなど)。"""
print(f"[{alert.level.value.upper()}] {alert.symbol} "
f"Score: {alert.score}/6 | {', '.join(alert.reasons)}")
...
自動化のための主要閾値
| パラメータ | WATCHの閾値 | ENTRYの閾値 |
|---|---|---|
| 出来高Z-score | > 3 | > 5 |
| ファンディングレートZ-score | > 2 | > 3 |
| 4時間OI増加率 | > 50% | > 100% |
| ピークからの価格 | -5%~-15% | -15%~-30% |
| ローソク足パターン | 任意 | 強(strength > 0.6) |
| 価格 vs VWAP | VWAP付近 | 2%以上下方 |
統計と現実
正直に言おう。この戦略は聖杯ではない。2024-2025年のデータでのバックテストの概算統計は以下の通り:
| 指標 | 値 |
|---|---|
| 勝率(スコア >= 4) | 約62-68% |
| 平均利益 | +18-25% |
| 平均損失 | -8-12% |
| プロフィットファクター | 1.8-2.3 |
| 最大ドローダウン | -15-22% |
| シャープレシオ | 1.1-1.6 |
主な限界:
-
生存者バイアス: 先物取引所で取引されるトークンのみを分析している。最も激しいポンプ&ダンプはDEXで発生し、そこではショートは不可能だ。
-
流動性: 多くの草コイン先物では、意味のあるポジションサイズに対して流動性が不十分。スリッページで利益の2-5%が消える可能性がある。
-
マーケットメイカーとの戦い: プロのMMはこれらのパターンを熟知しており、ショーターのストップロスを狩るために積極的に活用する。反転パターン形成後のフェイクポンプは標準的な手法だ。
-
ショートのブラックスワン: 理論上、ショートの損失は無限大だ。実際にはストップロスで問題は解決する——しかし低流動性の瞬間には、ストップが指定価格よりも大幅に悪い価格で約定する可能性がある。
結論
草コインのポンプ後のダンプをショートすることは、暗号資産におけるエッジ(統計的優位性)が実在する数少ない戦略の一つだ。その理由:個人トレーダーの大規模な非合理性が予測可能なパターンを作り出し、清算カスケードのメカニクスがあなたに有利な方向への動きを増幅する。
持ち帰るべき3つのルール:
-
インパルスをショートしないこと。 フェーズ3を待つ。反転パターンを待つ。OIダイバージェンスを待つ。忍耐こそが最も重要なツールであり、巧妙なインジケーターではない。
-
シグナルの収束を使うこと。 1つのインジケーターはノイズ。2つは仮説。4つ以上はトレード可能なセットアップ。ファンディング + OI + パターン + VWAP = エントリー。
-
レバレッジではなくポジションサイズを管理すること。 1トレードあたり2%のリスク、最大3-5倍レバレッジ、ストップロス >= 1.5 ATR。退屈?そうだ。しかし退屈なトレーダーだけが1年後も市場に残っている。
最後に。忘れないでほしい:すべてのダンプの背後には、本物のお金を失った実在の人々がいる。彼らの多くはFOMOに負けた初心者だ。私たちが分析しているのは市場のメカニクスであり、操作を推奨しているのではない。非効率性から利益を得ることは正当だ。その非効率性を作り出すことは違う。
ファンディングレートとレバレッジへの影響について詳しくは、ファンディングレートがレバレッジを殺すをご覧ください。トレーディングにおける異常検出方法についてはトレーディングボットの異常検出を。取引所間のファンディングレート裁定取引については取引所間ファンディングレート裁定取引をご参照ください。
参考リンク
- CoinGlass — 清算ヒートマップ
- CoinGlass — ファンディングレート
- CoinGlass — 建玉残高
- Coinalyze — 集計建玉残高
- Hyblock Capital — 清算レベル
- Laevitas — デリバティブ分析
- TradingView — アンカードVWAP
- Binance — ファンディングレート履歴
引用
@article{soloviov2026shitcoinpumpdump,
author = {Soloviov, Eugen},
title = {草コインのポンプ後の暴落を捉える方法:体系的アプローチ},
year = {2026},
url = {https://marketmaker.cc/ja/blog/post/shitcoin-pump-dump-strategies},
version = {0.1.0},
description = {草コインのポンプ後のショート戦略を体系的に解説。ファンディングレート、OI、出来高分析、ローソク足パターン、清算カスケード。実践的なアルゴリズム付き。}
}
MarketMaker.cc Team
クオンツ・リサーチ&戦略