أسرع طريقة للاقتناص المبكر لأي اختراق (Breakout) قوي هي مراقبة مرحلة انضغط الانحراف المعياري (Volatility Squeeze) الحادة، بالتزامن مع تجميع خفي للسيولة والحجم قبل أن ينفجر السعر.
المشكلة: ليه دايماً تشتري عند القمة (Top)؟
كل متداول مر بهالكابوس. تفتح المنصة، تشوف عملة طالعة +25% في آخر ساعتين، تدخل لونج (Long) بعاطفة الـ FOMO، وخلال ثلاث دقائق بالضبط السعر يرجع يكسر للأسفل مثل الحجر. للأسف، أنت صرت سيولة (Exit Liquidity) للحيتان اللي دخلوا بالخفاء من تحت.
أغلب المتداولين يتحركون بعقلية القطيع: يتفاعلون مع الحركة بعد ما تصير. لما تشوف العملة طايرة، والإشعارات شغال، وقنوات التليجرام شغالين صراخ "إلى القمر 🚀"، يكون صانع السوق (Market Maker) جالس يقفل صفقاته وياخذ أرباحه من أوامر الماركت تبعك. عشان تقتنع وتوقف تمويل أرباح غيرك، لازم تتعلم تدخل الصفقة لما يكون التشارت ميت ويجيب النوم، والتقلبات في أضعف مستوياتها.
الميكانيكية: وش يصير فعلياً قبل الانفجار السعري؟
السوق يتحرك دائماً بين مرحلتين: التجميع وانضغط السعر (Accumulation/Squeeze) والتصريف والانفجار (Distribution/Expansion). المزنوق لازم ينفك، والضغط العالي لازم يتبعه انفجار.
لما يقرر صانع السوق أو صندوق استثماري كبير يجمع كمية في عملة معينة، ما يقدر يرفع السعر فجأة عشان ما يخرب متوسط سعر الدخول تبعه (Average Entry). فيصير يمتص كل العروض المتاحة بهدوء وفي نطاق ضيق جداً (Tight Range). في هذي اللحظة، تشوف هالأمور على التشارت:
- انخفاض نطاق الحركة (Decreasing Range): الفرق بين أصلح وأقل سعر يومي يتقلص بشكل حاد.
- هبوط التقلبات التاريخية (HV Drop): التشارت يتحول لخط شبه مستقيم أو تذبذب عرضي ضيق جداً (Flat/Sideways).
- جفاف كتاب الأوامر (Order Book Drying): تجفيف أوامر صغار المتداولين والسيولة تنعدم، السوق يصير شبه معلق.
- شذوذ في دلتا الحجم (Volume Delta Anomalies): السعر واقف مكانه، بس تلمح عمليات شراء ماركت كبيرة تنفذ داخل الشمعة الضيقة أو ارتفاع غير طبيعي للحجم النسبي (RVOL).
أول ما يمتص الـ Market Maker كل الـ Free Float (الأسهم أو العملات المعروضة للتداول) من الأوردر بوك، يصير فيه فراغ سيولة. هنا أي أمر شراء ماركت بـ $50k-$100k بس كفيل إنه يطير السعر للسماء، لأنه ببساطة ما فيه أوامر بيع ليميت (Limit Orders) تصد الارتفاع.
تحليل مقارن للمؤشرات المستخدمة في الفرز (Screener)
عشان ما تضيع وقتك وتفرز 500 تشارت يدوي، نضبط الفلترة بناءً على الانحرافات الرياضية التالية:
| المؤشر (Metric) | قيمة الانضغط (Squeeze) | قيمة الانفجار (Breakout) | وش يعني هذا بلغة الفلوس؟ |
|---|---|---|---|
| BB Width (20, 2) | < 0.03 - 0.05 | > 0.15 | التقلبات انضغضت لأقصى حد، وعرض حديد بولينجر (Bollinger Bands) بأقل مستوى له خلال 14-30 يوم. |
| RVOL (Relative Vol) | > 2.2 أثناء الضغط | > 5.0 | السعر يتحرك جانبياً، بس الحجم أعلى من المتوسط بـ 2-3 مرات. فيه أحد قاعد يجمع ويكنس الأوردر بوك بهدوء. |
| Keltner / BB Ratio | داخل القنوات | اختراق الحدود | خطوط بولينجر دخلت بالكامل داخل قناة كيلتنر (هذا هو نمط TTM Squeeze الكلاسيكي). |
| Funding Rate | قريب من 0.00% أو بالسالب | تحول حاد للإيجاب أو السلب | صغار المتداولين لسه ما استوعبوا الحركة. ما فيه تضخم في عقود الفيووتشرز أو الرافعة المالية. |
| Open Interest (OI) | مستقر أو يرتفع بهدوء | ارتفاع انفجاري | الفائدة المفتوحة (OI) تنمو أثناء التذبذب العرضي — يعني فيه أموال ضخمة تجلس تدخل وتفتح صفقات مو مجرد تداولات أفراد. |
خوارزمية الفرز والبحث خلال 30 ثانية
إذا كنت تستخدم أدوات فلترة احترافية مثل (TradingView، Coinglass، ScalpStation أو سكربت خاص بك)، قائمة الفحص (Checklist) تبعك بتكون كذا:
- الفرز حسب BBW (عرض نطاق بولينجر): اضبط الفريم الزمني على 15 دقيقة أو ساعة. فرز القائمة من القيمة الأقل للأعلى.
- تصفية حسب حجم التداول اليومي (Volume 24h): استبعد عملات الـ Shitcoins الميتة اللي حجم تداولها اليومي أقل من 5M–10M دولار (لأن السيولة فيها ضعيفة وبتاكلك الانزلاقات السعرية Slippage).
- مطابقة RVOL مع OI: ابحث عن تقاطع ممتاز: قيمة BBW في القاع، وبنفس الوقت RVOL على فريم الساعة أو الـ 15 دقيقة قافز فوق 200-300%.
- تقييم النمط السعري: افتح التشارت. إذا شفت تذبذب عرضي ضيق جداً في نطاق 1-1.5% مع استقرار أو ارتفاع صريح في الدلتا التراكمية (Cumulative Delta) — اعرف إن العملة جاهزة للإقلاع.
سكربت بايثون احترافي للرصد الأوتوماتيكي (Production-Ready)
هذا السكربت جاهز لاقتناص هذه الفرص. يشتغل بـ ccxt، يسحب بيانات سوق العقود الآجلة (Futures)، يحسب TTM Squeeze و RVOL، ويطبع لك في الكونسول مباشرة قائمة العملات المجهزة للانفجار.
import asyncio
import ccxt.async_support as ccxt
import pandas as pd
import numpy as np
# Ограничение количества одновременных запросов
MAX_CONCURRENT_REQUESTS = 20
async def analyze_market(exchange, symbol, semaphore):
async with semaphore:
try:
# Запрашиваем 100 свечей на 15-минутном таймфрейме
ohlcv = await exchange.fetch_ohlcv(
symbol,
timeframe='15m',
limit=100
)
if not ohlcv or len(ohlcv) < 50:
return None
df = pd.DataFrame(
ohlcv,
columns=['time', 'open', 'high', 'low', 'close', 'volume']
)
# ===== Bollinger Bands (20, 2) =====
df['sma'] = df['close'].rolling(window=20).mean()
df['std'] = df['close'].rolling(window=20).std()
df['bb_upper'] = df['sma'] + (df['std'] * 2)
df['bb_lower'] = df['sma'] - (df['std'] * 2)
# Защита от деления на 0
df['bb_width'] = np.where(
df['sma'] != 0,
(df['bb_upper'] - df['bb_lower']) / df['sma'],
np.nan
)
# ===== Relative Volume (RVOL) =====
df['vol_sma'] = df['volume'].rolling(window=20).mean()
# Защита от деления на 0
df['rvol'] = np.where(
df['vol_sma'] != 0,
df['volume'] / df['vol_sma'],
np.nan
)
# Заменяем inf на NaN
df.replace([np.inf, -np.inf], np.nan, inplace=True)
# Проверяем, что данных достаточно
if len(df) < 52:
return None
# Последняя закрытая свеча
last_width = df['bb_width'].iloc[-2]
last_rvol = df['rvol'].iloc[-2]
last_close = df['close'].iloc[-2]
# Проверка на NaN
if pd.isna(last_width) or pd.isna(last_rvol):
return None
# Минимальная ширина полос за предыдущие 50 свечей
# НЕ включая анализируемую свечу
historical_widths = df['bb_width'].iloc[-52:-2]
if historical_widths.isna().all():
return None
min_width_50 = historical_widths.min()
# Условия поиска
is_squeezed = last_width <= (min_width_50 * 1.15)
has_volume_spike = last_rvol >= 2.5
if is_squeezed and has_volume_spike:
return {
'symbol': symbol,
'close': float(last_close),
'bb_width': round(float(last_width), 4),
'rvol': round(float(last_rvol), 2)
}
except Exception as e:
print(f"[ERROR] {symbol}: {e}")
return None
async def main():
exchange = ccxt.binance({
'enableRateLimit': True,
'options': {
'defaultType': 'future'
}
})
semaphore = asyncio.Semaphore(MAX_CONCURRENT_REQUESTS)
try:
await exchange.load_markets()
# Только USDT perpetual futures
symbols = [
symbol
for symbol in exchange.symbols
if symbol.endswith('/USDT:USDT')
]
print(f"[*] Сканирование {len(symbols)} пар на фьючерсном рынке...")
tasks = [
analyze_market(exchange, symbol, semaphore)
for symbol in symbols
]
results = await asyncio.gather(*tasks)
hot_targets = [
result
for result in results
if result is not None
]
# Сортировка по RVOL
hot_targets.sort(
key=lambda x: x['rvol'],
reverse=True
)
print("\n=== НАЙДЕННЫЕ МОНЕТЫ ПОД ИМПУЛЬС ===")
if not hot_targets:
print("Совпадений не найдено.")
return
print(
f"{'Символ':<18} | "
f"{'Цена':<15} | "
f"{'BB Width':<10} | "
f"{'RVOL':<8}"
)
print("-" * 65)
for target in hot_targets:
print(
f"{target['symbol']:<18} | "
f"{target['close']:<15.8f} | "
f"{target['bb_width']:<10} | "
f"{target['rvol']:<8}"
)
finally:
await exchange.close()
if __name__ == '__main__':
asyncio.run(main())إدارة المخاطر وتكنيك الدخول: كيف ما يتصفر حسابك باختراق وهمي؟
تحديد الانضغط واكتشافه هو نص المشوار بس. النص الثاني الأهم هو إنك ما تطلع ستوب (Stop-Loss) لما يقرر الحوت يسوي تصفية وهمية (Shakeout) لضرب السيولة قبل الحركة الحقيقية.
لا تدخل "ماركت" قبل تأكيد الاختراق: إنك تنتظر الانضغط مو معناه تقفز بالصفقة عمياني. ادخل إما بأمر ليميت (Limit) عند الحد السفلي للتذبذب (لو تشتري سبوت)، أو انتظر التأكيد (إغلاق شمعة 5m/15m خارج حدود Bollinger Bands مع فوليوم عالي).
حساب أمر وقف الخسارة (Stop-Loss):
- لا تحط الستوب عشوائي أو نسبة ثابتة مثل 1%.
- استخدم مؤشر ATR (متوسط النطاق الحقيقي). حط الستوب على مسافة 1.5 * ATR من نقطة الدخول خلف الجانب المباشر المعاكس لمنطقة التجميع.
جني الأرباح (Take Profit):
- TP1 (50% من الصفقة): عند هدف مساوي لمدى نطاق التجميع بالكامل (نسبة مخاطرة إلى عائد 1:2). وأمن باقي الصفقة على دخولك (Break-even).
- TP2 (50% المتبقية): تتبع أرباح متحرك (Trailing Stop) بناءً على خطوط 15m EMA9/EMA21 طالما التكنيك والترند الحقيقي مستمر.
الحماية من الكسر الوهمي (Fakeouts): إذا كسر السعر حد التجميع بس الفوليوم طاح مباشرة ورجعت الشمعة اللي بعدها جوة النطاق — هذا تلعيب وضرب سيولة. لا تعدل وتزيد عقودك (No Averaging Down)، اطلع وخسر قليل فوراً.
تذكر دائماً: الانفجار الحقيقي بعد الانضغط ما يعطيك مجال تفكر. إذا السعر كسر النطاق وجلس يعلق ويتذبذب مكانه، اعرف إن الحركة فشلت وقفل صفقتك فوراً.
طبقة "الفائدة الممتازة" المتقدمة: الإشارات الخفية التي يغفل عنها 95% من المتداولين
تكتفي غالبية الفلاتر (Screeners) بالبحث عن ضغط الأسعار التقليدي. المشكلة؟ الضغط المباشر وحده يعرضك لتقلبات وهمية (Whipsaws) تضرب أوامر إيقاف الخسارة في الاتجاهين. لرفع نسبة نجاح صفقاتك إلى 75-80%، أنت بحاجة إلى طبقة تصفية إضافية: تحليل سياق العقود المشتقة.
1. خلل التوازن بين العقود المفتوحة (OI) ومعدل التمويل (Funding Rate)
تتشكل حالة "الزنبرك المضغوط" المثالية عندما يتوحد السعر داخل نطاق ضيق، بينما تشهد العقود الآجلة نشاطاً غير عادي:
- سيناريو الضغط القصير (Short Squeeze): يتحرك السعر في نطاق ضيق بنسبة 1%. تقفز العقود المفتوحة (OI) بنسبة 15-20% خلال ساعات معدودة. يهبط معدل التمويل إلى السلب العميق (مثال: -0.04%). هذا يعني أن صغار المتداولين يندفعون بصفقات البيع الآجل في المسار العرضي انتظاراً للهبوط. يرى صانع السوق هذا الجدار من أوامر الإيقاف والتصفية في الأعلى، فيطلق دفعة سعرية حادة في الاتجاه المعاكس.
- سيناريو الضغط الطويل (Long Squeeze): عكس الحالة السابقة تماماً. ترتفع العقود المفتوحة، ويرتفع معدل التمويل بشكل مفرط (+0.05% فأكثر)، بينما يظل السعر ثابتاً. لا توجد سيولة شرائية في الأعلى — الاندفاع القادم سيكون للهبوط، مما يجرف صفقات الشراء المفرطة في الرافعة المالية.
2. تتابع الضغط عبر أطر زمنية متعددة (MTF Cascade)
الاندفاع على إطار 15 دقيقة يمنح تحركاً بين 2% و4%. أما الاندفاع المتزامن مع ضغط على إطار الساعة والإطار 4 ساعات فيحقق مكاسب حادة بين 15% و50% دون ارتداد.
ابحث عن العملات التي يقع فيها عرض نطاق بولينجر (BB Width) عند أدنى شريحة 5% خلال آخر 30 يوماً على إطار 4H، بالتزامن مع ارتفاع مفاجئ في الحجم على إطار 15M في الوقت الحالي (RVOL > 3.0). هذه هي اللحظة التي يطلق فيها الإطار الزمني الأصغر شرارة الانفجار للإطار الأكبر.
كود Pine Script جاهز (TradingView v5)
إذا كنت تفضل عرض إشارات الفلترة مباشرة على رسومك البيانية في TradingView، استخدم هذا المؤشر. يقوم المؤشر بتحديد مناطق ضغط التقلب (عندما تدخل نطاقات بولينجر داخل قنوات كيلتنر) وإرسال تنبيهات عند ظهور حجم تداول غير عادي.
//@version=5
indicator("Quant Squeeze & Volume Trigger [EXPERT v2]", overlay=true, max_labels_count=500)
// ======================================================
// Settings
// ======================================================
groupBB = "Bollinger Bands"
groupKC = "Keltner Channels"
groupVOL = "Volume"
groupTREND = "Trend Filter"
bbLength = input.int(20, "BB Length", minval=1, group=groupBB)
bbMult = input.float(2.0, "BB Multiplier", minval=0.1, group=groupBB)
kcLength = input.int(20, "KC Length", minval=1, group=groupKC)
kcMult = input.float(1.5, "KC Multiplier", minval=0.1, group=groupKC)
rvolThreshold = input.float(2.2, "RVOL Threshold (x)", minval=0.1, group=groupVOL)
emaLength = input.int(200, "Trend EMA", minval=1, group=groupTREND)
showLongs = input.bool(true, "Show LONG", group=groupTREND)
showShorts = input.bool(true, "Show SHORT", group=groupTREND)
// ======================================================
// Bollinger Bands
// ======================================================
[bbMiddle, bbUpper, bbLower] = ta.bb(close, bbLength, bbMult)
// Protection against zero division
bbWidth = bbMiddle != 0 ? (bbUpper - bbLower) / bbMiddle : na
// ======================================================
// Keltner Channels
// ======================================================
kcMa = ta.ema(close, kcLength)
// ATR is more reliable for Keltner
kcAtr = ta.atr(kcLength)
kcUpper = kcMa + (kcAtr * kcMult)
kcLower = kcMa - (kcAtr * kcMult)
// ======================================================
// Relative Volume
// ======================================================
volSma = ta.sma(volume, 20)
rvol = (not na(volSma) and volSma > 0) ? volume / volSma : na
// ======================================================
// TTM Squeeze Logic
// ======================================================
// Bollinger completely inside Keltner
isSqueezed = bbUpper < kcUpper and bbLower > kcLower
// Was squeezed recently
wasSqueezed = isSqueezed[1]
// Release from squeeze
squeezeReleased = wasSqueezed and not isSqueezed
// ======================================================
// Trend Filter
// ======================================================
emaTrend = ta.ema(close, emaLength)
bullTrend = close > emaTrend
bearTrend = close < emaTrend
// ======================================================
// Breakout Confirmation
// ======================================================
// Volume confirmation
volumeConfirmed = not na(rvol) and rvol >= rvolThreshold
// Price confirmation
bullBreakout = close > bbUpper
bearBreakout = close < bbLower
// ======================================================
// Anti-Spam Logic
// ======================================================
// Prevent consecutive signals
var int lastLongBar = na
var int lastShortBar = na
cooldownBars = 10
canLong =
na(lastLongBar) or
(bar_index - lastLongBar > cooldownBars)
canShort =
na(lastShortBar) or
(bar_index - lastShortBar > cooldownBars)
// ======================================================
// Final Signals
// ======================================================
longSignal =
showLongs and
barstate.isconfirmed and
squeezeReleased and
volumeConfirmed and
bullBreakout and
bullTrend and
canLong
shortSignal =
showShorts and
barstate.isconfirmed and
squeezeReleased and
volumeConfirmed and
bearBreakout and
bearTrend and
canShort
if longSignal
lastLongBar := bar_index
if shortSignal
lastShortBar := bar_index
// ======================================================
// Visualization
// ======================================================
// Background during squeeze
bgcolor(
isSqueezed
? color.new(color.orange, 88)
: na,
title="Squeeze Background"
)
// Trend EMA
plot(
emaTrend,
title="EMA Trend",
color=color.blue,
linewidth=2
)
// LONG
plotshape(
longSignal,
title="LONG Signal",
style=shape.triangleup,
location=location.belowbar,
color=color.lime,
size=size.small,
text="LONG"
)
// SHORT
plotshape(
shortSignal,
title="SHORT Signal",
style=shape.triangledown,
location=location.abovebar,
color=color.red,
size=size.small,
text="SHORT"
)
// ======================================================
// Alerts
// ======================================================
alertcondition(
longSignal,
title="LONG Breakout",
message="LONG breakout detected on {{ticker}}"
)
alertcondition(
shortSignal,
title="SHORT Breakout",
message="SHORT breakout detected on {{ticker}}"
)تشريح المصائد: التمييز بين الاختراق الحقيقي والكسر الوهمي (Shakeout)
يعلم كبار المشتريين والمؤسسات بوضوح أين تقع أوامر وقف الخسارة للذين يتداولون ضغط التقلب. لهذا السبب، تشهد 40% من الحالات اختراقاً وهمياً خاطفاً (Spring/Upthrust) قبل بدء الحركة الحقيقية.

كيف تتجنب الوقوع في هذه المصيدة:
راقب الدلتا (Delta) الخاصة بالشمعة ذات الذيل الخاطف. إذا كسر السعر الحد الأدنى للتجميع، وشكلت الشمعة ذيلاً سفلياً طويلاً، بينما أظهرت الدلتا التراكمية (Cumulative Delta) عمليات شراء شائعة بقوة عبر أورد الماركت (شمعة حمراء بدلت أفقية خضراء) — فهذا امتصاص غير مباشر (Absorption). قام مشتري كبير بوضع طلبات حدية واستوعب جميع أوامر البيع الناتجة عن تفعيل وقف الخسارة.
قاعدة الشموع الثلاث: الاندفاع الحقيقي لا يعود إلى نطاق الضغط. إذا عاد السعر للداخل فور الاختراق خلال الشمعة الأولى أو الثانية، أغلق الصفقة فوراً. كان هذا مجرد سحب للسيولة.
قائمة التحقق قبل التداول (5 ثوانٍ قبل النقر)
قبل دخول الصفقة بناءً على إشارة فلتر التقلب، قم بمرور سريع على هذه القائمة:
| الخطوة | عنصر التحقق | المعيار المقبول للدخول | إشارة خطر (إلغاء الصفقة) |
|---|---|---|---|
| 1 | حجم التداول اليومي (24h Vol) | > $10,000,000 | < $2,000,000 (الانزلاق السعري سيلتهم أرباحك) |
| 2 | الارتباط مع البيتكوين (BTC) | البيتكوين يتداول بشكل عرضي أو يتبع الحركة | هبوط/صعود حاد للبيتكوين بنسبة >1.5% الآن |
| 3 | عمق السوق / دفتر الطلبات (Spot/Futures) | غياب الكثافات الحدية الكبيرة أمامه | جدار من الطلبات الحدية يبعد 0.5% عن السعر الحالي |
| 4 | الفارق السعري (Bid/Ask Spread) | < 0.05% | > 0.2% (سيولة ضعيفة للغاية) |
| 5 | المسافة إلى أقرب مستوى محوري | مساحة كافية لتحقيق عائد 1:3 على الأقل | السعر اصطدم بالفعل بمستوى مقاومة/دعم أسبوعي |
الخلاصة العملية
فلاتر التقلب ليست بلورة سحرية للتنبؤ بالمستقبل. إنها أداة لتوفير وقتك، تتيح لك في نصف دقيقة استبعاد 98% من الضوضاء في السوق والتركيز على 2% من الأصول التي يتم فيها حالياً بناء صفقات مؤسسية ضخمة.
لا تحاول تخمين اتجاه الحركة داخل نطاق الضغط بدون تأكيد الحجم والدلتا. دع السوق يكشف عن أوراقه أولاً، وادخل مع الاندفاع المؤكد واقتنص 3% إلى 8% بحجم مخاطرة مضبوط تماماً.