📌"Pulse Reversal" (Импульсный разворот)🧑💻
💡 Идея: 🧨
Цена движется рывками — кластерами микросделок.
Если после сильного импульса возникает мгновенное затухание активности — это сигнал, что импульс исчерпан и начинается контрдействие (локальный разворот).
Мы ловим моменты, когда:
- цена делает 3+ быстрых движения подряд в одном направлении,
- но объём сделок и амплитуда мгновенно падают,
- и появляется короткий возврат (реакция участников).
Это часто предшествует локальному откату, который можно использовать для скальпингового входа.
#торговые_стратегии
📌 Подпишись Crypto Python❗️
💡 Идея: 🧨
Цена движется рывками — кластерами микросделок.
Если после сильного импульса возникает мгновенное затухание активности — это сигнал, что импульс исчерпан и начинается контрдействие (локальный разворот).
Мы ловим моменты, когда:
- цена делает 3+ быстрых движения подряд в одном направлении,
- но объём сделок и амплитуда мгновенно падают,
- и появляется короткий возврат (реакция участников).
Это часто предшествует локальному откату, который можно использовать для скальпингового входа.
import websocket
import json
import time
from collections import deque
from datetime import datetime
SYMBOL = "btcusdt"
WINDOW = 5 # секунд
PULSE_COUNT = 3
COOLDOWN = 2
REVERSAL_THRESHOLD = 0.0005 # 0.05%
trades = deque(maxlen=500)
last_pulse = 0
def on_message(ws, msg):
global last_pulse
data = json.loads(msg)
price = float(data["p"])
side = "buy" if not data["m"] else "sell"
ts = time.time()
trades.append((ts, price, side))
# Проверяем импульс
recent = [t for t in trades if ts - t[0] < WINDOW]
if len(recent) < PULSE_COUNT:
return
dirs = [x[2] for x in recent[-PULSE_COUNT:]]
if all(d == dirs[0] for d in dirs):
start_price = recent[-PULSE_COUNT][1]
end_price = recent[-1][1]
move = (end_price - start_price) / start_price * (1 if dirs[0] == "buy" else -1)
if move > 0.001 and ts - last_pulse > COOLDOWN:
last_pulse = ts
print(f"[{datetime.now().strftime('%H:%M:%S')}] PULSE → {dirs[0].upper()} detected!")
# Проверяем откат после импульса
if ts - last_pulse < WINDOW:
last_dir = dirs[-1]
recent_prices = [x[1] for x in recent]
delta = (recent_prices[-1] - recent_prices[0]) / recent_prices[0]
if abs(delta) > REVERSAL_THRESHOLD:
signal = "BUY" if last_dir == "sell" else "SELL"
print(f"[{datetime.now().strftime('%H:%M:%S')}] REVERSAL SIGNAL → {signal}")
def run():
ws = websocket.WebSocketApp(f"wss://stream.binance.com:9443/ws/{SYMBOL}@trade", on_message=on_message)
ws.run_forever()
if __name__ == "__main__":
print(f"Starting Pulse Reversal Detector for {SYMBOL} ...")
run()
#торговые_стратегии
📌 Подпишись Crypto Python❗️
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
📌“Micro-Impulse Trap” — Ловушка микроимпульсов🧑💻
💡 Идея: 🧨
На микросекундных движениях часто наблюдается закономерность:
после короткого сильного импульса, за которым следует резкая пауза без продолжения, рынок возвращается к точке старта импульса — это реакция алгоритмов, которые не нашли ликвидности для продолжения.
Мы отслеживаем:
быстрые скачки цены (например, >0.15% за секунду);
отсутствие обновления high/low в следующие 2 секунды;
и заходим в противоположную сторону на возврат.
🧩 Алгоритм: 🛠️
1. Каждую секунду фиксируем текущую цену.
2. Если за 1 секунду цена выросла >0.15% — запоминаем уровень импульса.
3. Через 2 секунды:
если цена не выше импульсного high → вход в шорт (ожидание возврата).
4. Если цена упала >0.15%:
через 2 секунды, если не ниже low → вход в лонг.
5. Цель — возврат на 0.1–0.2% к средней.
#торговые_стратегии
📌 Подпишись Crypto Python❗️
💡 Идея: 🧨
На микросекундных движениях часто наблюдается закономерность:
после короткого сильного импульса, за которым следует резкая пауза без продолжения, рынок возвращается к точке старта импульса — это реакция алгоритмов, которые не нашли ликвидности для продолжения.
Мы отслеживаем:
быстрые скачки цены (например, >0.15% за секунду);
отсутствие обновления high/low в следующие 2 секунды;
и заходим в противоположную сторону на возврат.
🧩 Алгоритм: 🛠️
1. Каждую секунду фиксируем текущую цену.
2. Если за 1 секунду цена выросла >0.15% — запоминаем уровень импульса.
3. Через 2 секунды:
если цена не выше импульсного high → вход в шорт (ожидание возврата).
4. Если цена упала >0.15%:
через 2 секунды, если не ниже low → вход в лонг.
5. Цель — возврат на 0.1–0.2% к средней.
import ccxt
import time
from collections import deque
exchange = ccxt.binance({'enableRateLimit': True})
symbol = 'ETH/USDT'
window = deque(maxlen=3)
position = None
entry = 0
THR_IMPULSE = 0.0015 # 0.15%
TP = 0.001 # 0.1%
SL = 0.0015 # 0.15%
print("Micro-Impulse Trap started...\n")
while True:
price = exchange.fetch_ticker(symbol)['last']
window.append(price)
if len(window) == 3:
p_now = window[-1]
p_prev = window[-2]
p_old = window[0]
impulse = (p_prev - p_old) / p_old
# восходящий импульс без продолжения
if impulse > THR_IMPULSE and position is None:
time.sleep(2)
new_price = exchange.fetch_ticker(symbol)['last']
if new_price <= p_prev: # нет обновления high
position = 'short'
entry = new_price
print(f"📉 SHORT {symbol} at {entry:.3f} — импульс вверх погашен")
# нисходящий импульс без продолжения
elif impulse < -THR_IMPULSE and position is None:
time.sleep(2)
new_price = exchange.fetch_ticker(symbol)['last']
if new_price >= p_prev: # нет обновления low
position = 'long'
entry = new_price
print(f"📈 LONG {symbol} at {entry:.3f} — импульс вниз погашен")
# выход
if position == 'long':
if price >= entry * (1 + TP):
print(f"✅ TP LONG {symbol} at {price:.3f}")
position = None
elif price <= entry * (1 - SL):
print(f"❌ SL LONG {symbol} at {price:.3f}")
position = None
elif position == 'short':
if price <= entry * (1 - TP):
print(f"✅ TP SHORT {symbol} at {price:.3f}")
position = None
elif price >= entry * (1 + SL):
print(f"❌ SL SHORT {symbol} at {price:.3f}")
position = None
time.sleep(1)
#торговые_стратегии
📌 Подпишись Crypto Python❗️
👍9❤1
📌“Echo Rebound” (Эхо-отскок цены)🧑💻
Тип: скальпинг/интрадей
Платформа: спот Binance
Идея:🧨
рынок имеет “эхо” — если импульс вверх быстро поглощается встречными ордерами, часто через 5–15 секунд следует возврат точно в противоположную сторону.
💡 Логика:🛠️
1. Слежение за скоростью изменения цены (не направлением, а ускорением).
2. Если за последние 3 секунды цена выросла >0.25%,
но в следующие 2 секунды не обновляет high, значит импульс поглощён — это ловушка покупателей.
→ Вход в шорт.
3. Если за последние 3 секунды цена упала >0.25%,
но в следующие 2 секунды не обновляет low, значит импульс поглощён — это ловушка продавцов.
→ Вход в лонг.
4. Выход:
- при обратном движении ±0.15–0.25%,
- или через 10 секунд, если цена не сдвинулась.
#торговые_стратегии
📌 Подпишись Crypto Python❗️
Тип: скальпинг/интрадей
Платформа: спот Binance
Идея:🧨
рынок имеет “эхо” — если импульс вверх быстро поглощается встречными ордерами, часто через 5–15 секунд следует возврат точно в противоположную сторону.
💡 Логика:🛠️
1. Слежение за скоростью изменения цены (не направлением, а ускорением).
2. Если за последние 3 секунды цена выросла >0.25%,
но в следующие 2 секунды не обновляет high, значит импульс поглощён — это ловушка покупателей.
→ Вход в шорт.
3. Если за последние 3 секунды цена упала >0.25%,
но в следующие 2 секунды не обновляет low, значит импульс поглощён — это ловушка продавцов.
→ Вход в лонг.
4. Выход:
- при обратном движении ±0.15–0.25%,
- или через 10 секунд, если цена не сдвинулась.
import ccxt
import time
from collections import deque
symbol = 'BTC/USDT'
exchange = ccxt.binance({'enableRateLimit': True})
WINDOW_SEC = 5
price_history = deque(maxlen=WINDOW_SEC)
position = None
entry_price = 0
print("Echo Rebound Strategy running...")
while True:
ticker = exchange.fetch_ticker(symbol)
price = ticker['last']
price_history.append(price)
if len(price_history) == WINDOW_SEC:
p_now = price_history[-1]
p_3s = price_history[-3]
move = (p_now - p_3s) / p_3s
# вход в шорт
if move > 0.0025 and position is None:
# ждём 2 сек — если high не обновился, значит импульс поглощён
time.sleep(2)
new_price = exchange.fetch_ticker(symbol)['last']
if new_price <= price:
position = 'short'
entry_price = new_price
print(f"📉 SHORT {symbol} at {entry_price:.2f} (echo down)")
# вход в лонг
elif move < -0.0025 and position is None:
time.sleep(2)
new_price = exchange.fetch_ticker(symbol)['last']
if new_price >= price:
position = 'long'
entry_price = new_price
print(f"📈 LONG {symbol} at {entry_price:.2f} (echo up)")
# выход
if position == 'long':
if price >= entry_price * 1.0025:
print(f"✅ Take profit LONG at {price:.2f}")
position = None
elif price <= entry_price * 0.9985:
print(f"❌ Stop loss LONG at {price:.2f}")
position = None
elif position == 'short':
if price <= entry_price * 0.9975:
print(f"✅ Take profit SHORT at {price:.2f}")
position = None
elif price >= entry_price * 1.0015:
print(f"❌ Stop loss SHORT at {price:.2f}")
position = None
time.sleep(1)
#торговые_стратегии
📌 Подпишись Crypto Python❗️
👍9😁1
📌“Pulse Shift” — Сдвиг рыночного пульса🧑💻
💡 Идея: 🧨
Рынок дышит: периоды импульсов чередуются с микропаузами.
После серии быстрых свечей с равномерным направлением почти всегда следует инерционное отклонение — короткий импульс в противоположную сторону, когда поток ордеров “перегревается”.
Эта стратегия отслеживает ритм изменения цены во времени и ищет сдвиг частоты импульсов, сигнализирующий о выгорании одной стороны.
🧠 Принцип:🛠️
1. Каждую секунду измеряем изменение цены.
2. Храним последние 10 дельт (изменений).
3. Если последние 4 дельты подряд в одном направлении (вверх или вниз),
но текущая дельта резко уменьшается по амплитуде (в 2+ раза),
— значит импульс “перегорел”.
4. Входим в обратную сторону от предыдущего направления.
5. Выходим при откате 0.2–0.3%.
#торговые_стратегии
📌 Подпишись Crypto Python❗️
💡 Идея: 🧨
Рынок дышит: периоды импульсов чередуются с микропаузами.
После серии быстрых свечей с равномерным направлением почти всегда следует инерционное отклонение — короткий импульс в противоположную сторону, когда поток ордеров “перегревается”.
Эта стратегия отслеживает ритм изменения цены во времени и ищет сдвиг частоты импульсов, сигнализирующий о выгорании одной стороны.
🧠 Принцип:🛠️
1. Каждую секунду измеряем изменение цены.
2. Храним последние 10 дельт (изменений).
3. Если последние 4 дельты подряд в одном направлении (вверх или вниз),
но текущая дельта резко уменьшается по амплитуде (в 2+ раза),
— значит импульс “перегорел”.
4. Входим в обратную сторону от предыдущего направления.
5. Выходим при откате 0.2–0.3%.
import ccxt
import time
from collections import deque
exchange = ccxt.binance({'enableRateLimit': True})
symbol = 'BTC/USDT'
DELTAS = deque(maxlen=10)
position = None
entry_price = None
TP = 0.002 # 0.2%
SL = 0.0015 # 0.15%
print("Pulse Shift Strategy running...\n")
while True:
price = exchange.fetch_ticker(symbol)['last']
time.sleep(1)
new_price = exchange.fetch_ticker(symbol)['last']
delta = new_price - price
DELTAS.append(delta)
if len(DELTAS) < 6:
continue
# определяем направление последних импульсов
last_moves = list(DELTAS)[-5:]
up_count = sum(1 for d in last_moves if d > 0)
down_count = sum(1 for d in last_moves if d < 0)
# если 4+ подряд в одну сторону
if position is None:
if up_count >= 4 and abs(last_moves[-1]) < abs(last_moves[-2]) / 2:
position = 'short'
entry_price = new_price
print(f"📉 SHORT {symbol} — импульс вверх перегорел ({entry_price:.2f})")
elif down_count >= 4 and abs(last_moves[-1]) < abs(last_moves[-2]) / 2:
position = 'long'
entry_price = new_price
print(f"📈 LONG {symbol} — импульс вниз перегорел ({entry_price:.2f})")
elif position == 'long':
if new_price >= entry_price * (1 + TP):
print(f"✅ TP LONG {symbol} at {new_price:.2f}")
position = None
elif new_price <= entry_price * (1 - SL):
print(f"❌ SL LONG {symbol} at {new_price:.2f}")
position = None
elif position == 'short':
if new_price <= entry_price * (1 - TP):
print(f"✅ TP SHORT {symbol} at {new_price:.2f}")
position = None
elif new_price >= entry_price * (1 + SL):
print(f"❌ SL SHORT {symbol} at {new_price:.2f}")
position = None
#торговые_стратегии
📌 Подпишись Crypto Python❗️
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
📌“Micro Rebound Engine” — реакция на микро-дисбалансы после резких сбросов🧑💻
💡 Идея: 🧨
Эта стратегия наблюдает не за свечами и не за индикаторами, а за поведением микродвижений цены — как рынок реагирует на мгновенные сбросы (mini-dump).
Когда происходит серия быстрых падений, но объём продаж начинает иссякать, рынок часто делает технический микровыкуп — короткий отскок.
Ты ловишь именно этот первый микровыкуп, пока толпа ещё в панике.
🧩 Принцип: 🛠️
1. Отслеживаем цену раз в 0.5–1 секунду.
2. Если за последние 10 секунд:
цена упала на ≥ X % (например, 0.4%),
но за последние 3 секунды темп падения снижается (разница между последовательными дельтами уменьшается),
— тогда открывается лонг.
3. Закрываем сделку, как только цена отрастает на 0.3% или проходит 20 секунд (всё — микро-реакция).
#торговые_стратегии
📌 Подпишись Crypto Python❗️
💡 Идея: 🧨
Эта стратегия наблюдает не за свечами и не за индикаторами, а за поведением микродвижений цены — как рынок реагирует на мгновенные сбросы (mini-dump).
Когда происходит серия быстрых падений, но объём продаж начинает иссякать, рынок часто делает технический микровыкуп — короткий отскок.
Ты ловишь именно этот первый микровыкуп, пока толпа ещё в панике.
🧩 Принцип: 🛠️
1. Отслеживаем цену раз в 0.5–1 секунду.
2. Если за последние 10 секунд:
цена упала на ≥ X % (например, 0.4%),
но за последние 3 секунды темп падения снижается (разница между последовательными дельтами уменьшается),
— тогда открывается лонг.
3. Закрываем сделку, как только цена отрастает на 0.3% или проходит 20 секунд (всё — микро-реакция).
import ccxt
import time
import numpy as np
exchange = ccxt.binance({'enableRateLimit': True})
symbol = 'BTC/USDT'
prices = []
print(f"🔥 Запуск стратегии Micro Rebound Engine для {symbol}")
while True:
ticker = exchange.fetch_ticker(symbol)
price = ticker['last']
prices.append(price)
# Храним последние 20 цен
if len(prices) > 20:
prices.pop(0)
recent_drop = (prices[-10] - prices[-1]) / prices[-10] * 100
last_deltas = np.diff(prices[-5:])
delta_change = np.mean(last_deltas[:-1]) - np.mean(last_deltas[-2:])
if recent_drop <= -0.4 and delta_change > 0:
entry = prices[-1]
print(f"[LONG] Потенциальный микро-отскок: {entry}")
t0 = time.time()
while time.time() - t0 < 20:
p = exchange.fetch_ticker(symbol)['last']
if (p - entry) / entry * 100 >= 0.3:
print(f"[EXIT] Микро-профит зафиксирован: {p}")
break
time.sleep(1)
time.sleep(1)
#торговые_стратегии
📌 Подпишись Crypto Python❗️
👍5❤1
📌“Volatility Pulse” — живой пульс волатильности рынка 🧑💻
💡 Идея: 🧨
Инструмент отслеживает реальную рыночную активность — темп изменения цены и объёма за секунду.
Он показывает, какие пары “оживают” прямо сейчас, ещё до того, как начнётся движение.
То есть ты видишь импульс в момент его зарождения, а не после свечи.
#инструмент
📌 Подпишись Crypto Python❗️
💡 Идея: 🧨
Инструмент отслеживает реальную рыночную активность — темп изменения цены и объёма за секунду.
Он показывает, какие пары “оживают” прямо сейчас, ещё до того, как начнётся движение.
То есть ты видишь импульс в момент его зарождения, а не после свечи.
import ccxt
import time
import numpy as np
exchange = ccxt.binance({'enableRateLimit': True})
symbols = [s['symbol'] for s in exchange.load_markets().values() if '/USDT' in s['symbol']]
price_data = {s: [] for s in symbols}
volume_data = {s: [] for s in symbols}
print("🔥 Volatility Pulse — живой монитор рыночной активности\n")
while True:
pulse = {}
for symbol in symbols[:50]: # ограничим первые 50 пар
try:
ticker = exchange.fetch_ticker(symbol)
price = ticker['last']
vol = ticker['baseVolume']
price_data[symbol].append(price)
volume_data[symbol].append(vol)
if len(price_data[symbol]) > 3:
dp = abs(price_data[symbol][-1] - price_data[symbol][-2]) / price_data[symbol][-2]
dv = abs(volume_data[symbol][-1] - volume_data[symbol][-2]) / (volume_data[symbol][-2] + 1e-9)
pulse[symbol] = dp * dv
price_data[symbol] = price_data[symbol][-3:]
volume_data[symbol] = volume_data[symbol][-3:]
except Exception:
continue
# Топ 5 по пульсу
if pulse:
top = sorted(pulse.items(), key=lambda x: x[1], reverse=True)[:5]
print("\n🔥 Топ активных пар:")
for sym, score in top:
print(f"{sym}: VPI={score:.6f}")
time.sleep(3)
#инструмент
📌 Подпишись Crypto Python❗️
👍6
📌Order Flow Gradient (OFG)🧑💻
💡 Суть:🧨
Order Flow Gradient — это инструмент, измеряющий наклон дисбаланса ордеров во времени, а не просто их объём.
Он показывает, как быстро смещается сила покупателей и продавцов в сторону одной из сторон стакана.
⚙️ Как работает:🛠️
1. Каждую секунду запрашиваются данные стакана (orderbook) с Binance.
2. Для каждой стороны (bid/ask) вычисляется:
3. Разница между G_bid и G_ask даёт градиент потока ордеров.
Если G_bid > G_ask, значит покупатели агрессивно наращивают объём — растущий импульс.
Если G_ask > G_bid, значит продавцы усиливаются — возможен откат или дамп.
#инструмент
📌 Подпишись Crypto Python❗️
💡 Суть:🧨
Order Flow Gradient — это инструмент, измеряющий наклон дисбаланса ордеров во времени, а не просто их объём.
Он показывает, как быстро смещается сила покупателей и продавцов в сторону одной из сторон стакана.
⚙️ Как работает:🛠️
1. Каждую секунду запрашиваются данные стакана (orderbook) с Binance.
2. Для каждой стороны (bid/ask) вычисляется:
G = \frac{\Delta(\text{объём})}{\Delta t}3. Разница между G_bid и G_ask даёт градиент потока ордеров.
Если G_bid > G_ask, значит покупатели агрессивно наращивают объём — растущий импульс.
Если G_ask > G_bid, значит продавцы усиливаются — возможен откат или дамп.
import ccxt
import time
exchange = ccxt.binance({'enableRateLimit': True})
symbol = 'BTC/USDT'
def calc_gradient(prev_bids, prev_asks, bids, asks):
bid_vol_prev = sum(v for _, v in prev_bids[:10])
ask_vol_prev = sum(v for _, v in prev_asks[:10])
bid_vol = sum(v for _, v in bids[:10])
ask_vol = sum(v for _, v in asks[:10])
return (bid_vol - bid_vol_prev), (ask_vol - ask_vol_prev)
prev = exchange.fetch_order_book(symbol)
time.sleep(1)
print(f"Order Flow Gradient tracking {symbol}...\n")
while True:
ob = exchange.fetch_order_book(symbol)
bid_grad, ask_grad = calc_gradient(prev['bids'], prev['asks'], ob['bids'], ob['asks'])
diff = bid_grad - ask_grad
if diff > 0:
print(f"🟢 Покупатели усиливаются: градиент {diff:.4f}")
elif diff < 0:
print(f"🔴 Продавцы усиливаются: градиент {diff:.4f}")
else:
print(f"⚪ Баланс сил")
prev = ob
time.sleep(1)
#инструмент
📌 Подпишись Crypto Python❗️
👍7
📌“Latency Pulse Monitor” — монитор сетевого пульса рынка🧑💻
💡 Идея: 🧨
Большинство трейдеров смотрят только на цену и объём, но немногие отслеживают задержку между запросом и ответом от биржи.
А ведь скачки latency — это ранний признак:
перегрузки API (рынок в панике),
приближающихся резких движений (повышенная активность),
технических лагов, из-за которых сигналы могут запаздывать.
Инструмент показывает “здоровье канала связи” с Binance и помогает определить, когда рынок входит в режим турбулентности.
⚙️ Принцип: 🛠️
1. Каждые 1–2 секунды отправляется запрос fetch_ticker() к бирже.
2. Измеряется время отклика.
3. Рассчитывается латентность-среднее и скачки отклонений.
4. Если latency растёт >50% от среднего — выводится предупреждение ⚠️, что рынок переходит в “нагруженное состояние”.
#инструмент
📌 Подпишись Crypto Python❗️
💡 Идея: 🧨
Большинство трейдеров смотрят только на цену и объём, но немногие отслеживают задержку между запросом и ответом от биржи.
А ведь скачки latency — это ранний признак:
перегрузки API (рынок в панике),
приближающихся резких движений (повышенная активность),
технических лагов, из-за которых сигналы могут запаздывать.
Инструмент показывает “здоровье канала связи” с Binance и помогает определить, когда рынок входит в режим турбулентности.
⚙️ Принцип: 🛠️
1. Каждые 1–2 секунды отправляется запрос fetch_ticker() к бирже.
2. Измеряется время отклика.
3. Рассчитывается латентность-среднее и скачки отклонений.
4. Если latency растёт >50% от среднего — выводится предупреждение ⚠️, что рынок переходит в “нагруженное состояние”.
import ccxt
import time
import numpy as np
exchange = ccxt.binance({'enableRateLimit': True})
symbol = 'BTC/USDT'
latencies = []
print("⚙️ Latency Pulse Monitor запущен...\n")
while True:
start = time.time()
try:
exchange.fetch_ticker(symbol)
except Exception:
continue
latency = time.time() - start
latencies.append(latency)
if len(latencies) > 30:
latencies.pop(0)
mean_lat = np.mean(latencies)
std_lat = np.std(latencies)
last_lat = latencies[-1]
if last_lat > mean_lat + 2 * std_lat:
print(f"⚠️ Всплеск сетевой задержки ({last_lat:.3f}s) — возможен всплеск активности на рынке!")
else:
print(f"✅ Нормальный пульс: {last_lat:.3f}s (среднее {mean_lat:.3f}s)")
time.sleep(2)
#инструмент
📌 Подпишись Crypto Python❗️
👍5❤2
📌“Echo Reversal” — стратегия отзвуков инерции🧑💻
💡 Идея: 🧨
После любого сильного движения (вверх или вниз) рынок часто делает коррекционный отклик — эхо.
Если движение быстро затухает (цена перестаёт ускоряться), вероятен реверс, который длится несколько минут.
Ты ловишь этот момент, когда импульс выдыхается, а рынок ещё не перешёл в боковик.
🧩 Принцип работы: 🛠️
1. Измеряем скорость движения цены (разницу между текущей и предыдущей ценой).
2. Измеряем ускорение — насколько быстро меняется скорость.
3. Если:
скорость положительная (цена растёт),
но ускорение становится отрицательным (рост замедляется),
— значит импульс исчерпывается → вход в шорт.
4. Аналогично, если цена падает, но ускорение становится положительным → лонг.
#торговые_стратегии
📌 Подпишись Crypto Python❗️
💡 Идея: 🧨
После любого сильного движения (вверх или вниз) рынок часто делает коррекционный отклик — эхо.
Если движение быстро затухает (цена перестаёт ускоряться), вероятен реверс, который длится несколько минут.
Ты ловишь этот момент, когда импульс выдыхается, а рынок ещё не перешёл в боковик.
🧩 Принцип работы: 🛠️
1. Измеряем скорость движения цены (разницу между текущей и предыдущей ценой).
2. Измеряем ускорение — насколько быстро меняется скорость.
3. Если:
скорость положительная (цена растёт),
но ускорение становится отрицательным (рост замедляется),
— значит импульс исчерпывается → вход в шорт.
4. Аналогично, если цена падает, но ускорение становится положительным → лонг.
import ccxt
import time
import numpy as np
exchange = ccxt.binance({'enableRateLimit': True})
symbol = 'BTC/USDT'
prices = []
print(f"🚀 Запуск стратегии Echo Reversal для {symbol}")
while True:
ticker = exchange.fetch_ticker(symbol)
price = ticker['last']
prices.append(price)
if len(prices) > 6:
speeds = np.diff(prices[-4:]) # скорость
accels = np.diff(speeds) # ускорение
speed = np.mean(speeds[-2:])
accel = np.mean(accels)
if speed > 0 and accel < 0:
print(f"[SHORT] Импульс затухает — потенциальный разворот вниз при {price}")
elif speed < 0 and accel > 0:
print(f"[LONG] Импульс выдыхается — потенциальный разворот вверх при {price}")
prices = prices[-6:]
time.sleep(2)
#торговые_стратегии
📌 Подпишись Crypto Python❗️
👍3🔥3❤1
📌“Market Friction Meter” — измеритель трения рынка🧑💻
💡 Идея: 🧨
Когда рынок движется “легко”, ордера исполняются плавно, цена быстро проходит уровни.
Но когда движение замедляется, а ордера начинают “вязнуть” в стакане — это рыночное трение.
Оно часто предшествует развороту или импульсу (в зависимости от стороны).
Инструмент оценивает, насколько “тяжело” движется цена, вычисляя сопротивление в стакане.
#инструмент
📌 Подпишись Crypto Python❗️
💡 Идея: 🧨
Когда рынок движется “легко”, ордера исполняются плавно, цена быстро проходит уровни.
Но когда движение замедляется, а ордера начинают “вязнуть” в стакане — это рыночное трение.
Оно часто предшествует развороту или импульсу (в зависимости от стороны).
Инструмент оценивает, насколько “тяжело” движется цена, вычисляя сопротивление в стакане.
import ccxt
import time
import numpy as np
exchange = ccxt.binance({'enableRateLimit': True})
symbol = 'BTC/USDT'
print(f"🧭 Market Friction Meter активен для {symbol}")
prev_mid = None
prev_bid_vol = None
prev_ask_vol = None
while True:
ob = exchange.fetch_order_book(symbol)
bids = np.array(ob['bids'][:20])
asks = np.array(ob['asks'][:20])
bid_vol = bids[:,1].sum()
ask_vol = asks[:,1].sum()
mid_price = (bids[0,0] + asks[0,0]) / 2
if prev_mid is not None:
delta_p = abs(mid_price - prev_mid)
delta_v = abs((bid_vol - prev_bid_vol) + (ask_vol - prev_ask_vol))
FI = delta_p / (delta_v + 1e-9)
if FI < 1e-5:
print(f"⚠️ Высокое рыночное трение ({FI:.2e}) — готовится резкий пробой")
elif FI > 1e-3:
print(f"💨 Низкое трение ({FI:.2e}) — цена движется свободно")
else:
print(f"ℹ️ Среднее трение ({FI:.2e}) — рынок стабилен")
prev_mid = mid_price
prev_bid_vol = bid_vol
prev_ask_vol = ask_vol
time.sleep(2)
#инструмент
📌 Подпишись Crypto Python❗️
👍6❤2
📌“Паническая тишина” (Panic Silence)🧑💻
Тип: Скальпинг/интрадей
Рынок: Спот
Основа: Реакция толпы и структура ордеров, без индикаторов
💡 Идея: 🧨
Рынок никогда не падает или не растёт бесконечно. После паники (всплеска объёма и движения) наступает тишина — момент, когда:
объёмы резко снижаются,
спред немного сужается,
движение будто “замирает”.
Но именно в этот момент маркетмейкеры и крупные игроки начинают обратные наборы позиций.
Мы используем этот микросигнал — “тишину после паники” — как точку входа.
⚙️ Условия входа: 🛠️
1. Определяем панику:
За последние 5 минут объём > среднего в 3 раза
Цена изменилась > 1.5%
Спред расширился
2. Ждём тишину:
За последнюю минуту объём падает минимум в 2 раза
Цена стабилизируется (Δ < 0.2%)
Спред сужается
3. Вход:
Вход против последнего движения паники
Если падение → покупаем
Если всплеск роста → продаём
Цель: возврат на 30–50% от амплитуды паники
4. Выход:
Take Profit — 0.5–1%
Stop Loss — за крайним уровнем паники
#торговые_стратегии
📌 Подпишись Crypto Python❗️
Тип: Скальпинг/интрадей
Рынок: Спот
Основа: Реакция толпы и структура ордеров, без индикаторов
💡 Идея: 🧨
Рынок никогда не падает или не растёт бесконечно. После паники (всплеска объёма и движения) наступает тишина — момент, когда:
объёмы резко снижаются,
спред немного сужается,
движение будто “замирает”.
Но именно в этот момент маркетмейкеры и крупные игроки начинают обратные наборы позиций.
Мы используем этот микросигнал — “тишину после паники” — как точку входа.
⚙️ Условия входа: 🛠️
1. Определяем панику:
За последние 5 минут объём > среднего в 3 раза
Цена изменилась > 1.5%
Спред расширился
2. Ждём тишину:
За последнюю минуту объём падает минимум в 2 раза
Цена стабилизируется (Δ < 0.2%)
Спред сужается
3. Вход:
Вход против последнего движения паники
Если падение → покупаем
Если всплеск роста → продаём
Цель: возврат на 30–50% от амплитуды паники
4. Выход:
Take Profit — 0.5–1%
Stop Loss — за крайним уровнем паники
import ccxt
import time
import numpy as np
exchange = ccxt.binance({'enableRateLimit': True})
symbol = 'BTC/USDT'
window_vol = []
window_price = []
while True:
ohlcv = exchange.fetch_ohlcv(symbol, '1m', limit=10)
closes = [c[4] for c in ohlcv]
vols = [c[5] for c in ohlcv]
avg_vol = np.mean(vols[:-1])
avg_delta = abs(closes[-1] - closes[-6]) / closes[-6] * 100
last_vol = vols[-1]
# Условие паники
panic = (last_vol > avg_vol * 3) and (avg_delta > 1.5)
if panic:
print("🚨 Обнаружена паника, ждём тишину...")
time.sleep(60)
ohlcv2 = exchange.fetch_ohlcv(symbol, '1m', limit=3)
vols2 = [c[5] for c in ohlcv2]
closes2 = [c[4] for c in ohlcv2]
if vols2[-1] < np.mean(vols2[:-1]) / 2 and abs(closes2[-1] - closes2[-2]) / closes2[-2] < 0.002:
direction = "LONG" if closes[-1] < closes[-2] else "SHORT"
print(f"✅ Паническая тишина: входим в {direction} на {symbol}")
else:
print("😐 Тишина не подтверждена")
time.sleep(30)
#торговые_стратегии
📌 Подпишись Crypto Python❗️
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥4❤1
app.py
10 KB
📌Cross-Pair Basket Mean-Reverter
- (формирует корзину похожих монет и торгует отклонения спреда между базовой парой и корзиной)🧑💻
Идея (коротко): 🧨
Берём целевую пару (например, ABC/USDT) и автоматически подбираем небольшую корзину коррелированных инструментов (например, 3–5 пар).
Строим взвешенный средний цены корзины и считаем спред (price_target / basket_price).
Если спред отклоняется далеко от среднего (z-score > порог) — торгуем на возврат:
спред в верхней хвостовой части → шорт target / лонг корзину,
в нижней хвостовой части → лонг target / шорт корзину.
Это позволяет ловить арбитраж/mean-reversion между похожими активами без сложных ML.
Почему полезно: 💸
Работает на реальном поведении рынка (корреляции) — не индикаторы.
Подходит для спота и «парного» размещения лимитных/market ордеров.
Уменьшает риск направления рынка: открываются две противоположные позиции (target vs basket).
#торговые_стратегии
📌 Подпишись Crypto Python❗️
- (формирует корзину похожих монет и торгует отклонения спреда между базовой парой и корзиной)🧑💻
Идея (коротко): 🧨
Берём целевую пару (например, ABC/USDT) и автоматически подбираем небольшую корзину коррелированных инструментов (например, 3–5 пар).
Строим взвешенный средний цены корзины и считаем спред (price_target / basket_price).
Если спред отклоняется далеко от среднего (z-score > порог) — торгуем на возврат:
спред в верхней хвостовой части → шорт target / лонг корзину,
в нижней хвостовой части → лонг target / шорт корзину.
Это позволяет ловить арбитраж/mean-reversion между похожими активами без сложных ML.
Почему полезно: 💸
Работает на реальном поведении рынка (корреляции) — не индикаторы.
Подходит для спота и «парного» размещения лимитных/market ордеров.
Уменьшает риск направления рынка: открываются две противоположные позиции (target vs basket).
#торговые_стратегии
📌 Подпишись Crypto Python❗️
👍5🔥2
📌“Order Exhaustion Trap” — ловушка выдохшегося тренда🧑💻
💡 Идея: 🧨
Каждое устойчивое движение (вверх или вниз) в какой-то момент выдыхается —
скорость ордеров падает, спред стабилизируется, но цена всё ещё ползёт в ту же сторону.
Это “зомби-тренд”: покупатели или продавцы продолжают давить инерционно,
а ликвидность уже перераспределена, и вскоре наступает резкий разворот.
Стратегия ищет такие моменты, когда движение выглядит “живым”,
но внутри рынка ордерный поток уже ослаб.
⚙️ Принцип работы: 🛠️
1. Раз в секунду анализируется стакан ордеров (fetch_order_book).
2. Считается:
bid_pressure — объём в верхних 5 уровнях покупателей,
ask_pressure — объём в верхних 5 уровнях продавцов.
3. Измеряется динамика этих давлений за последние N секунд.
4. Если цена продолжает расти, но bid_pressure резко снижается → рынок выдыхается, ожидается разворот вниз.
И наоборот для шорта.
#торговые_стратегии
📌 Подпишись Crypto Python❗️
💡 Идея: 🧨
Каждое устойчивое движение (вверх или вниз) в какой-то момент выдыхается —
скорость ордеров падает, спред стабилизируется, но цена всё ещё ползёт в ту же сторону.
Это “зомби-тренд”: покупатели или продавцы продолжают давить инерционно,
а ликвидность уже перераспределена, и вскоре наступает резкий разворот.
Стратегия ищет такие моменты, когда движение выглядит “живым”,
но внутри рынка ордерный поток уже ослаб.
⚙️ Принцип работы: 🛠️
1. Раз в секунду анализируется стакан ордеров (fetch_order_book).
2. Считается:
bid_pressure — объём в верхних 5 уровнях покупателей,
ask_pressure — объём в верхних 5 уровнях продавцов.
3. Измеряется динамика этих давлений за последние N секунд.
4. Если цена продолжает расти, но bid_pressure резко снижается → рынок выдыхается, ожидается разворот вниз.
И наоборот для шорта.
import ccxt
import time
import numpy as np
exchange = ccxt.binance({'enableRateLimit': True})
symbol = 'BTC/USDT'
print(f"🚀 Стратегия Order Exhaustion Trap активна для {symbol}")
history = []
def pressure(orderbook, side="bids", depth=5):
levels = orderbook[side][:depth]
return sum(v for _, v in levels)
while True:
ob = exchange.fetch_order_book(symbol)
ticker = exchange.fetch_ticker(symbol)
price = ticker['last']
bp = pressure(ob, "bids")
ap = pressure(ob, "asks")
history.append((time.time(), price, bp, ap))
if len(history) > 10:
history = history[-10:]
prices = [h[1] for h in history]
bids = [h[2] for h in history]
asks = [h[3] for h in history]
price_slope = np.polyfit(range(len(prices)), prices, 1)[0]
bid_slope = np.polyfit(range(len(bids)), bids, 1)[0]
ask_slope = np.polyfit(range(len(asks)), asks, 1)[0]
# логика: цена растёт, но давление покупателей падает
if price_slope > 0 and bid_slope < 0:
print(f"[SHORT] Цена ↑, покупатели выдыхаются ({price:.2f})")
# цена падает, но давление продавцов падает
elif price_slope < 0 and ask_slope < 0:
print(f"[LONG] Цена ↓, продавцы выдыхаются ({price:.2f})")
time.sleep(2)
#торговые_стратегии
📌 Подпишись Crypto Python❗️
❤4👍3
📌“Liquidity Swing Sniper” — Снайпер по ликвидности🧑💻
💡 Идея: 🧨
Цена почти всегда делает "свечи-пробои" — короткие импульсы вверх или вниз, где забирают ликвидность и потом возвращаются обратно.
Стратегия ищет такие локальные выбросы, где за 1-3 минуты цена выходит за границы диапазона последних X минут, но быстро возвращается.
Мы входим в контртренд, если рынок совершил "ложный пробой" диапазона ликвидности.
⚙️ Логика: 🛠️
1. Каждые 5 секунд считываем цену.
2. Строим диапазон high и low за последние N секунд (например 300 = 5 мин).
3. Если текущая цена выходит за high более чем на threshold%,
а через несколько секунд возвращается в диапазон — это ложный пробой вверх → сигнал на шорт.
4. Аналогично вниз → ложный пробой вниз → лонг.
⚙️ Условия фильтрации:❗
Объём не должен быть нулевым (чтобы избежать тени).
Расстояние пробоя должно быть достаточно значимым (> 0.2%).
Возврат в диапазон — быстро (< 30 секунд), иначе это может быть тренд.
#торговые_стратегии
📌 Подпишись Crypto Python❗️
💡 Идея: 🧨
Цена почти всегда делает "свечи-пробои" — короткие импульсы вверх или вниз, где забирают ликвидность и потом возвращаются обратно.
Стратегия ищет такие локальные выбросы, где за 1-3 минуты цена выходит за границы диапазона последних X минут, но быстро возвращается.
Мы входим в контртренд, если рынок совершил "ложный пробой" диапазона ликвидности.
⚙️ Логика: 🛠️
1. Каждые 5 секунд считываем цену.
2. Строим диапазон high и low за последние N секунд (например 300 = 5 мин).
3. Если текущая цена выходит за high более чем на threshold%,
а через несколько секунд возвращается в диапазон — это ложный пробой вверх → сигнал на шорт.
4. Аналогично вниз → ложный пробой вниз → лонг.
⚙️ Условия фильтрации:❗
Объём не должен быть нулевым (чтобы избежать тени).
Расстояние пробоя должно быть достаточно значимым (> 0.2%).
Возврат в диапазон — быстро (< 30 секунд), иначе это может быть тренд.
import ccxt
import time
from collections import deque
from datetime import datetime
exchange = ccxt.binance({'enableRateLimit': True})
symbol = "BTC/USDT"
window_sec = 300 # 5 минут
refresh_sec = 5
threshold = 0.002 # 0.2%
prices = deque(maxlen=window_sec // refresh_sec)
in_signal = None
def now():
return datetime.utcnow().strftime("%H:%M:%S")
while True:
try:
ticker = exchange.fetch_ticker(symbol)
price = ticker['last']
prices.append(price)
if len(prices) < prices.maxlen:
time.sleep(refresh_sec)
continue
high = max(prices)
low = min(prices)
mid = (high + low) / 2
# Пробой вверх
if price > high * (1 + threshold):
print(f"{now()} ⏫ Потенциальный ложный пробой вверх: {price:.2f}")
in_signal = ("short", high)
time_break = time.time()
# Пробой вниз
elif price < low * (1 - threshold):
print(f"{now()} ⏬ Потенциальный ложный пробой вниз: {price:.2f}")
in_signal = ("long", low)
time_break = time.time()
# Проверка возврата в диапазон
if in_signal:
side, ref = in_signal
if time.time() - time_break < 30: # 30 секунд на возврат
if low <= price <= high:
if side == "short":
print(f"{now()} 🔻 SHORT сигнал — цена вернулась под пробой.")
else:
print(f"{now()} 🔺 LONG сигнал — цена вернулась над пробоем.")
in_signal = None
else:
in_signal = None
time.sleep(refresh_sec)
except Exception as e:
print("Ошибка:", e)
time.sleep(refresh_sec)
#торговые_стратегии
📌 Подпишись Crypto Python❗️
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9
📌“Pressure Pulse” — импульс ордерного давления🧑💻
💡 Идея: 🧨
Рынок часто даёт краткосрочные импульсы, когда дисбаланс между ордерами на покупку и продажу становится критическим.
Например:
если суммарный объём BID (покупок) в ордербуке резко растёт,
но цена пока не пошла вверх — вероятен взрыв вверх (не хватает ликвидности).
И наоборот — SELL-доминирование → провал вниз.
⚙️ Принцип: 🛠️
1. Получаем глубину рынка (order book) через Binance API.
2. Суммируем верхние N уровней bid и ask (например, 10 уровней).
3. Считаем pressure = (bid_volume - ask_volume) / (bid_volume + ask_volume).
pressure > 0.3 → покупатели агрессивны, возможен рост.
pressure < -0.3 → продавцы доминируют.
4. Сравниваем текущий pressure с изменением цены.
Если давление растёт, но цена стоит → готовится импульс.
#торговые_стратегии
📌 Подпишись Crypto Python❗️
💡 Идея: 🧨
Рынок часто даёт краткосрочные импульсы, когда дисбаланс между ордерами на покупку и продажу становится критическим.
Например:
если суммарный объём BID (покупок) в ордербуке резко растёт,
но цена пока не пошла вверх — вероятен взрыв вверх (не хватает ликвидности).
И наоборот — SELL-доминирование → провал вниз.
⚙️ Принцип: 🛠️
1. Получаем глубину рынка (order book) через Binance API.
2. Суммируем верхние N уровней bid и ask (например, 10 уровней).
3. Считаем pressure = (bid_volume - ask_volume) / (bid_volume + ask_volume).
pressure > 0.3 → покупатели агрессивны, возможен рост.
pressure < -0.3 → продавцы доминируют.
4. Сравниваем текущий pressure с изменением цены.
Если давление растёт, но цена стоит → готовится импульс.
import ccxt
import time
from datetime import datetime
import numpy as np
exchange = ccxt.binance({'enableRateLimit': True})
symbol = 'BTC/USDT'
DEPTH_LEVELS = 10
PRESSURE_THR = 0.3
REFRESH_SEC = 2
def now():
return datetime.utcnow().strftime("%H:%M:%S")
def get_pressure(symbol):
order_book = exchange.fetch_order_book(symbol, limit=DEPTH_LEVELS)
bids = np.array(order_book['bids'])
asks = np.array(order_book['asks'])
bid_vol = bids[:,1].sum()
ask_vol = asks[:,1].sum()
pressure = (bid_vol - ask_vol) / (bid_vol + ask_vol)
mid = (bids[0,0] + asks[0,0]) / 2
return pressure, mid
last_price = None
last_pressure = None
print(f"{now()} ▶ Начало наблюдения за {symbol}")
while True:
try:
pressure, price = get_pressure(symbol)
if last_price:
delta_p = price - last_price
delta_press = pressure - last_pressure if last_pressure else 0
msg = f"{now()} price={price:.2f} pressure={pressure:+.2f}"
if pressure > PRESSURE_THR and abs(delta_p) < price * 0.0005:
print(msg + " ⚡ LONG setup (рост давления без движения цены)")
elif pressure < -PRESSURE_THR and abs(delta_p) < price * 0.0005:
print(msg + " ⚡ SHORT setup (продавцы давят, цена застыла)")
else:
print(msg)
last_price = price
last_pressure = pressure
time.sleep(REFRESH_SEC)
except Exception as e:
print("Ошибка:", e)
time.sleep(REFRESH_SEC)
#торговые_стратегии
📌 Подпишись Crypto Python❗️
👍6❤1
app.py
10 KB
📌Order Flow DNA — визуализатор структуры ордеров по логике “генома рынка”🧑💻
💡 Суть идеи: 🧨
Это консольный (или веб) инструмент, который не показывает свечи или объёмы, а строит “генетический код” рынка — строку из символов, отражающих микро-поведение цены.
🔍 Как это работает: 🛠
1. Каждый тик (обновление цены) классифицируется по направлению, объёму и скорости:
A — крупная агрессивная покупка,
a — мелкая покупка,
B — крупная агрессивная продажа,
b — мелкая продажа,
S — стоп-снятие (всплеск ликвидности),
M — флэт (market micro-pause).
2. Инструмент строит последовательность символов, например:
Это “геном” текущего состояния рынка.
3. Алгоритм анализирует повторяющиеся паттерны ДНК и выявляет “мутации” — места, где рыночное поведение отклоняется от нормы.
Такие мутации почти всегда совпадают с резким движением (начало тренда или пробой).
#инструмент
📌 Подпишись Crypto Python❗️
💡 Суть идеи: 🧨
Это консольный (или веб) инструмент, который не показывает свечи или объёмы, а строит “генетический код” рынка — строку из символов, отражающих микро-поведение цены.
🔍 Как это работает: 🛠
1. Каждый тик (обновление цены) классифицируется по направлению, объёму и скорости:
A — крупная агрессивная покупка,
a — мелкая покупка,
B — крупная агрессивная продажа,
b — мелкая продажа,
S — стоп-снятие (всплеск ликвидности),
M — флэт (market micro-pause).
2. Инструмент строит последовательность символов, например:
AABbSMAaaBBM...
Это “геном” текущего состояния рынка.
3. Алгоритм анализирует повторяющиеся паттерны ДНК и выявляет “мутации” — места, где рыночное поведение отклоняется от нормы.
Такие мутации почти всегда совпадают с резким движением (начало тренда или пробой).
#инструмент
📌 Подпишись Crypto Python❗️
👍5
📌“Market Stress Radar”🧑💻
📊 Измеритель микростресса рынка по распределению сделок во времени
💡 Суть идеи: 🧨
Когда рынок входит в стресс — будь то импульс, паника или шорт-сквиз — резко меняется микроструктура времени между сделками.
Даже до того, как движение станет очевидным.
Market Stress Radar измеряет именно это:
как часто происходят сделки (trade frequency),
насколько равномерны временные интервалы,
и строит метрику “напряжения рынка”.
⚙️ Принцип: 🛠️
1. Подключаемся к Binance WebSocket @trade.
2. Считаем интервалы между сделками (в миллисекундах).
3. Поддерживаем окно (например, 200 сделок).
4. Рассчитываем:
volatility_time = std(intervals)
tension = 1 / (volatility_time + ε)
фильтруем экспоненциально, чтобы убрать шум.
5. Если tension резко ↑ — рынок “сжимается” (ожидание движения).
6. Если tension резко ↓ — рынок “расслабился” (затухание, выдох).
#инструмент
📌 Подпишись Crypto Python❗️
📊 Измеритель микростресса рынка по распределению сделок во времени
💡 Суть идеи: 🧨
Когда рынок входит в стресс — будь то импульс, паника или шорт-сквиз — резко меняется микроструктура времени между сделками.
Даже до того, как движение станет очевидным.
Market Stress Radar измеряет именно это:
как часто происходят сделки (trade frequency),
насколько равномерны временные интервалы,
и строит метрику “напряжения рынка”.
⚙️ Принцип: 🛠️
1. Подключаемся к Binance WebSocket @trade.
2. Считаем интервалы между сделками (в миллисекундах).
3. Поддерживаем окно (например, 200 сделок).
4. Рассчитываем:
volatility_time = std(intervals)
tension = 1 / (volatility_time + ε)
фильтруем экспоненциально, чтобы убрать шум.
5. Если tension резко ↑ — рынок “сжимается” (ожидание движения).
6. Если tension резко ↓ — рынок “расслабился” (затухание, выдох).
import asyncio
import json
import statistics
import time
import websockets
from collections import deque
SYMBOL = "btcusdt"
WS_URL = f"wss://stream.binance.com:9443/ws/{SYMBOL}@trade"
WINDOW = 200
SMOOTH = 0.9 # EMA smoothing for tension
async def market_stress_radar():
print(f"🧭 Market Stress Radar — {SYMBOL}")
last_time = None
intervals = deque(maxlen=WINDOW)
tension_ema = 0
async with websockets.connect(WS_URL) as ws:
while True:
msg = json.loads(await ws.recv())
t = msg["T"] / 1000
if last_time:
dt = t - last_time
if dt > 0:
intervals.append(dt)
if len(intervals) > 10:
vol = statistics.stdev(intervals)
tension = 1 / (vol + 1e-6)
if tension_ema == 0:
tension_ema = tension
else:
tension_ema = SMOOTH * tension_ema + (1 - SMOOTH) * tension
level = ""
if tension_ema > 80:
level = "🔥 HIGH STRESS"
elif tension_ema > 50:
level = "⚠️ MEDIUM"
else:
level = "🟢 Calm"
print(f"[{time.strftime('%H:%M:%S')}] tension={tension_ema:6.2f} | {level}")
last_time = t
if __name__ == "__main__":
asyncio.run(market_stress_radar())
#инструмент
📌 Подпишись Crypto Python❗️
👍8❤1
📌“Shadow Depth Break” - (торговля по «теням» стакана — следим за тем, чего нет) 🧑💻
💡 Суть: 🧨
Обычно все анализируют то, что есть в стакане (цены и объёмы).
А эта стратегия анализирует то, чего там нет — пустоты, которые формируются, когда лимитные ордера внезапно исчезают на определённых уровнях.
Когда крупные участники убирают защитные ордера (особенно с одной стороны), рынок почти всегда “проваливается” в эту дыру ликвидности.
🔍 Принцип: 🛠️
1. Подключаемся к Binance через WebSocket depth@symbol.
2. Каждую секунду сравниваем изменения глубины стакана.
3. Если:
на стороне bid исчезает более 60% объёма за последние 3 секунды → SHORT сигнал,
на стороне ask исчезает >60% → LONG сигнал.
4. Это не пробой, не индикатор — это исчезновение интереса к защите уровня, за которым часто следует импульс.
#торговые_стратегии
📌 Подпишись Crypto Python❗️
💡 Суть: 🧨
Обычно все анализируют то, что есть в стакане (цены и объёмы).
А эта стратегия анализирует то, чего там нет — пустоты, которые формируются, когда лимитные ордера внезапно исчезают на определённых уровнях.
Когда крупные участники убирают защитные ордера (особенно с одной стороны), рынок почти всегда “проваливается” в эту дыру ликвидности.
🔍 Принцип: 🛠️
1. Подключаемся к Binance через WebSocket depth@symbol.
2. Каждую секунду сравниваем изменения глубины стакана.
3. Если:
на стороне bid исчезает более 60% объёма за последние 3 секунды → SHORT сигнал,
на стороне ask исчезает >60% → LONG сигнал.
4. Это не пробой, не индикатор — это исчезновение интереса к защите уровня, за которым часто следует импульс.
import asyncio
import json
import time
import websockets
SYMBOL = "btcusdt"
WS_URL = f"wss://stream.binance.com:9443/ws/{SYMBOL}@depth20@100ms"
VANISH_THRESHOLD = 0.6 # 60%
CHECK_INTERVAL = 3.0
class ShadowDepthBreak:
def __init__(self):
self.last_snapshot = None
self.last_time = time.time()
def detect_vanish(self, new_depth):
if self.last_snapshot is None:
self.last_snapshot = new_depth
return None
prev_bids = {p: v for p, v in self.last_snapshot['bids']}
prev_asks = {p: v for p, v in self.last_snapshot['asks']}
new_bids = {p: v for p, v in new_depth['bids']}
new_asks = {p: v for p, v in new_depth['asks']}
def total(vols): return sum(vols.values())
vanish_bid = 0.0
vanish_ask = 0.0
for p, v in prev_bids.items():
if p in new_bids:
if v > 0:
vanish_bid += max(0, v - new_bids[p])
else:
vanish_bid += v
for p, v in prev_asks.items():
if p in new_asks:
if v > 0:
vanish_ask += max(0, v - new_asks[p])
else:
vanish_ask += v
bid_loss = vanish_bid / (total(prev_bids) + 1e-9)
ask_loss = vanish_ask / (total(prev_asks) + 1e-9)
signal = None
if bid_loss > VANISH_THRESHOLD:
signal = "🚨 SHORT — bids vanished {:.0%}".format(bid_loss)
elif ask_loss > VANISH_THRESHOLD:
signal = "🚨 LONG — asks vanished {:.0%}".format(ask_loss)
self.last_snapshot = new_depth
return signal
async def main():
print(f"🧠 Shadow Depth Break started for {SYMBOL}")
sdb = ShadowDepthBreak()
async with websockets.connect(WS_URL) as ws:
while True:
msg = json.loads(await ws.recv())
now = time.time()
if now - sdb.last_time >= CHECK_INTERVAL:
sdb.last_time = now
signal = sdb.detect_vanish(msg)
if signal:
print(f"[{time.strftime('%H:%M:%S')}] {signal}")
if __name__ == "__main__":
asyncio.run(main())
#торговые_стратегии
📌 Подпишись Crypto Python❗️
👍7❤1
📌"Market Fracture Map" (Карта рыночных переломов)🧑💻
💡 Суть идеи: 🧨
Большинство трейдеров видят рынок как “цены”.
Этот инструмент показывает где рынок ломается структурно — то есть, где нарушается естественный поток сделок и ликвидности.
> Это не индикатор и не стратегия — это сканер микроструктуры, который визуализирует точки расхождения между ценой и потоком сделок.
#инструмент
📌 Подпишись Crypto Python❗️
💡 Суть идеи: 🧨
Большинство трейдеров видят рынок как “цены”.
Этот инструмент показывает где рынок ломается структурно — то есть, где нарушается естественный поток сделок и ликвидности.
> Это не индикатор и не стратегия — это сканер микроструктуры, который визуализирует точки расхождения между ценой и потоком сделок.
import asyncio
import json
import websockets
import statistics
import time
url = "wss://stream.binance.com:9443/ws/btcusdt@trade"
depth_url = "wss://stream.binance.com:9443/ws/btcusdt@depth20@100ms"
trade_volumes = []
liquidity_levels = []
prev_time = time.time()
async def trade_listener():
global trade_volumes
async with websockets.connect(url) as ws:
async for msg in ws:
data = json.loads(msg)
trade_volumes.append(float(data["q"]))
if len(trade_volumes) > 100:
trade_volumes.pop(0)
async def depth_listener():
global liquidity_levels, prev_time
async with websockets.connect(depth_url) as ws:
async for msg in ws:
data = json.loads(msg)
bids = sum(float(b[1]) for b in data["bids"][:5])
asks = sum(float(a[1]) for a in data["asks"][:5])
total_liq = bids + asks
liquidity_levels.append(total_liq)
if len(liquidity_levels) > 50:
liquidity_levels.pop(0)
if len(trade_volumes) > 10:
avg_vol = statistics.mean(trade_volumes)
avg_liq = statistics.mean(liquidity_levels)
cur_vol = trade_volumes[-1]
cur_liq = liquidity_levels[-1]
delta_vol = (cur_vol - avg_vol) / (avg_vol + 1e-9)
delta_liq = (cur_liq - avg_liq) / (avg_liq + 1e-9)
if delta_vol > 0.5 and delta_liq < -0.3:
print(f"⚡ UP FRACTURE — volume +{delta_vol:.1f}, liquidity {delta_liq:.1f}")
elif delta_vol > 0.5 and delta_liq > 0.3:
print(f"⚠️ FAKE FRACTURE — too much liquidity added")
elif delta_vol < -0.3 and delta_liq < -0.3:
print(f"🔻 DOWN FRACTURE — structure collapsing")
async def main():
await asyncio.gather(trade_listener(), depth_listener())
asyncio.run(main())
#инструмент
📌 Подпишись Crypto Python❗️
👍8
📌"Order Flow Tracer" 🧑💻
📊 Ловля краткосрочных движений через “отпечатки ликвидности” в стакане Binance
💡 Идея: 🧨
Большинство трейдеров смотрят на цену.
Эта стратегия смотрит на то, где “прячется” ликвидность — и использует аномалии в ленте ордеров.
> Цель — входить в тот момент, когда крупные игроки “убирают” или “выставляют” стену ордеров, создавая пустоту, куда рынок сразу же проваливается.
⚙️ Принцип работы:🛠️
1. Подключаемся к WebSocket Binance (depth20@100ms).
2. Наблюдаем за ордербуком в реальном времени.
3. Для каждой итерации:
вычисляем общий объём bid и ask в верхних 5 уровнях,
считаем коэффициент дисбаланса:
4. Если дисбаланс резко смещается (например, от +0.6 к -0.6 за 1 секунду):
это означает, что покупатели ушли, и цена провалится вниз.
#торговые_стратегии
📌 Подпишись Crypto Python❗️
📊 Ловля краткосрочных движений через “отпечатки ликвидности” в стакане Binance
💡 Идея: 🧨
Большинство трейдеров смотрят на цену.
Эта стратегия смотрит на то, где “прячется” ликвидность — и использует аномалии в ленте ордеров.
> Цель — входить в тот момент, когда крупные игроки “убирают” или “выставляют” стену ордеров, создавая пустоту, куда рынок сразу же проваливается.
⚙️ Принцип работы:🛠️
1. Подключаемся к WebSocket Binance (depth20@100ms).
2. Наблюдаем за ордербуком в реальном времени.
3. Для каждой итерации:
вычисляем общий объём bid и ask в верхних 5 уровнях,
считаем коэффициент дисбаланса:
imbalance = \frac{bid\_vol - ask\_vol}{bid\_vol + ask\_vol}
4. Если дисбаланс резко смещается (например, от +0.6 к -0.6 за 1 секунду):
это означает, что покупатели ушли, и цена провалится вниз.
import asyncio
import json
import time
import statistics
import websockets
import ccxt
symbol = "BTC/USDT"
ws_url = "wss://stream.binance.com:9443/ws/btcusdt@depth20@100ms"
exchange = ccxt.binance()
async def order_flow_tracer():
print(f"⚔️ Order Flow Tracer started for {symbol}")
prev_imbalance = None
prev_time = time.time()
async with websockets.connect(ws_url) as ws:
while True:
msg = json.loads(await ws.recv())
bids = msg["bids"][:5]
asks = msg["asks"][:5]
bid_vol = sum(float(b[1]) for b in bids)
ask_vol = sum(float(a[1]) for a in asks)
imbalance = (bid_vol - ask_vol) / (bid_vol + ask_vol + 1e-9)
now = time.time()
dt = now - prev_time
if prev_imbalance is not None and dt > 0:
delta = imbalance - prev_imbalance
speed = delta / dt
if abs(speed) > 1.5:
side = "LONG" if speed > 0 else "SHORT"
print(f"[{time.strftime('%H:%M:%S')}] ⚡ {side} signal | imbalance Δ={delta:.2f}")
prev_imbalance = imbalance
prev_time = now
if __name__ == "__main__":
asyncio.run(order_flow_tracer())
#торговые_стратегии
📌 Подпишись Crypto Python❗️
👍4🔥2
📌“Временные карманы” (Time Pocket Strategy)🧑💻
💡 Идея: 🧨
Рынок двигается неравномерно: бывают активные участки (импульсы) и “временные карманы” — периоды, где объём замедляется, но цена остаётся на одном уровне.
Часто такие зоны — это подготовка к выбросу ликвидности (breakout).
👉 Мы ищем такие “временные карманы” и входим в сторону первого мощного выхода из паузы.
⚙️ Логика:🛠️
1. Берём поток котировок или свечей (например, 1m).
2. Считаем среднюю скорость изменения цены и объёма.
3. Если цена остаётся в диапазоне <0.2% от средней 3+ минуты, но объём не исчезает — формируется “временной карман”.
4. Первый импульс (цена >0.3% за 30 секунд) — сигнал на вход.
5. Закрытие — по обратному импульсу или через фиксированный риск/прибыль.
#торговые_стратегии
📌 Подпишись Crypto Python❗️
💡 Идея: 🧨
Рынок двигается неравномерно: бывают активные участки (импульсы) и “временные карманы” — периоды, где объём замедляется, но цена остаётся на одном уровне.
Часто такие зоны — это подготовка к выбросу ликвидности (breakout).
👉 Мы ищем такие “временные карманы” и входим в сторону первого мощного выхода из паузы.
⚙️ Логика:🛠️
1. Берём поток котировок или свечей (например, 1m).
2. Считаем среднюю скорость изменения цены и объёма.
3. Если цена остаётся в диапазоне <0.2% от средней 3+ минуты, но объём не исчезает — формируется “временной карман”.
4. Первый импульс (цена >0.3% за 30 секунд) — сигнал на вход.
5. Закрытие — по обратному импульсу или через фиксированный риск/прибыль.
import asyncio
import json
import websockets
import statistics
import time
SYMBOL = "btcusdt"
URL = f"wss://stream.binance.com:9443/ws/{SYMBOL}@kline_1m"
prices = []
volumes = []
window = 3 # минут
async def listen():
async with websockets.connect(URL) as ws:
async for msg in ws:
data = json.loads(msg)
k = data["k"]
if not k["x"]: # свеча не закрыта
continue
close = float(k["c"])
vol = float(k["v"])
prices.append(close)
volumes.append(vol)
if len(prices) > window:
prices.pop(0)
volumes.pop(0)
rng = (max(prices) - min(prices)) / statistics.mean(prices)
vol_mean = statistics.mean(volumes)
if rng < 0.002 and vol_mean > 0.7 * max(volumes):
print(f"🕰 TIME POCKET detected at {close:.2f}")
elif rng > 0.003:
print(f"⚡ BREAKOUT from pocket → {close:.2f}")
asyncio.run(listen())
#торговые_стратегии
📌 Подпишись Crypto Python❗️
👍4❤1