📌“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
📌“Order Heat Echo” — карта термошума ордеров🧑💻
💡 Концепция: 🧨
Все биржи полны микроколебаний, которые не видны на графике.
Каждая отмена или установка ордера создаёт “тепловой шум” — его можно визуализировать.
Order Heat Echo — это инструмент, который показывает где рынок «нагревается» активностью, но ещё не проявил это в цене.
🔍 Как это работает: 🛠️
1. Через Binance WebSocket собираются данные о:
лимитных ордерах (bid/ask);
их отменах и изменениях.
2. Для каждого ценового уровня в стакане рассчитывается:
скорость изменений (Δобъем/Δвремя);
плотность ордеров (объем / расстояние между уровнями);
направленность потока (в какой стороне теплее — bid или ask).
3. Все данные проецируются в тепловую карту:
красные зоны — давление продаж;
синие — скопления покупателей;
серые — нейтральные участки.
#инструмент
📌 Подпишись Crypto Python❗️
💡 Концепция: 🧨
Все биржи полны микроколебаний, которые не видны на графике.
Каждая отмена или установка ордера создаёт “тепловой шум” — его можно визуализировать.
Order Heat Echo — это инструмент, который показывает где рынок «нагревается» активностью, но ещё не проявил это в цене.
🔍 Как это работает: 🛠️
1. Через Binance WebSocket собираются данные о:
лимитных ордерах (bid/ask);
их отменах и изменениях.
2. Для каждого ценового уровня в стакане рассчитывается:
скорость изменений (Δобъем/Δвремя);
плотность ордеров (объем / расстояние между уровнями);
направленность потока (в какой стороне теплее — bid или ask).
3. Все данные проецируются в тепловую карту:
красные зоны — давление продаж;
синие — скопления покупателей;
серые — нейтральные участки.
import asyncio
import json
import numpy as np
import matplotlib.pyplot as plt
import websockets
SYMBOL = "btcusdt"
URL = f"wss://stream.binance.com:9443/ws/{SYMBOL}@depth20@100ms"
heatmap = np.zeros(40) # 20 уровней bid + 20 уровней ask
async def order_heat_echo():
async with websockets.connect(URL) as ws:
while True:
data = json.loads(await ws.recv())
bids = data["bids"]
asks = data["asks"]
# Расчёт изменения плотности ордеров
for i, b in enumerate(bids[:20]):
heatmap[i] = float(b[1])
for i, a in enumerate(asks[:20]):
heatmap[20 + i] = float(a[1]) * -1 # продавцы — отрицательные значения
plt.clf()
plt.bar(range(len(heatmap)), heatmap, color=["red" if v < 0 else "blue" for v in heatmap])
plt.pause(0.01)
asyncio.run(order_heat_echo())
#инструмент
📌 Подпишись Crypto Python❗️
👍7❤1
📌Market Maker Shadow🧑💻
💡 Идея: 🧨
Маркет-мейкеры часто создают движения без объёма — короткие импульсы, чтобы выбить стопы, собрать ликвидность и вернуться в диапазон.
Мы можем использовать это поведение, если научимся распознавать “пустые движения”, где цена идёт быстро, но без поддержки свечей и объёма.
#торговые_стратегии
📌 Подпишись Crypto Python❗️
💡 Идея: 🧨
Маркет-мейкеры часто создают движения без объёма — короткие импульсы, чтобы выбить стопы, собрать ликвидность и вернуться в диапазон.
Мы можем использовать это поведение, если научимся распознавать “пустые движения”, где цена идёт быстро, но без поддержки свечей и объёма.
import ccxt
import numpy as np
import time
exchange = ccxt.binance()
symbol = "BTC/USDT"
tf = "1m"
def get_candles(symbol, tf="1m", limit=30):
ohlcv = exchange.fetch_ohlcv(symbol, tf, limit=limit)
return np.array(ohlcv)
def detect_fake_move(candles):
closes = candles[:, 4]
opens = candles[:, 1]
vols = candles[:, 5]
changes = (closes - opens) / opens * 100
vol_median = np.median(vols)
signal = None
if changes[-1] > 0.5 and vols[-1] < vol_median:
signal = "short"
elif changes[-1] < -0.5 and vols[-1] < vol_median:
signal = "long"
return signal, changes[-1], vols[-1], vol_median
while True:
candles = get_candles(symbol)
signal, change, vol, vmed = detect_fake_move(candles)
print(f"Δ={change:.2f}% | Vol={vol:.0f}/{vmed:.0f}")
if signal == "short":
print("🔻 Обнаружен пустой импульс вверх → вход в SHORT")
elif signal == "long":
print("🔼 Обнаружен пустой импульс вниз → вход в LONG")
time.sleep(60)
#торговые_стратегии
📌 Подпишись Crypto Python❗️
👍6❤2
📌“Range Sentinel” — детектор консолидации по энтропии рынка🧑💻
💡 Концепция: 🧨
Вместо классического поиска флэта по ATR, Bollinger или объёму, Range Sentinel измеряет “рыночную энтропию” — насколько непредсказуемы изменения цены внутри окна времени.
Если энтропия низкая → цена «застряла» в рэндже.
Если энтропия резко растёт → начинается выход из консолидации.
📊 Что даёт инструмент: 💸
Показывает зоны накопления без использования объёмов.
Отлично выявляет “ложные пробои” — если энтропия не растёт, значит, это не импульс.
Может работать на любом таймфрейме (от минут до дневок).
Можно использовать в боте:
когда H < 1.0 → флэт,
когда H > 2.0 → начало импульса.
#инструмент
📌 Подпишись Crypto Python❗️
💡 Концепция: 🧨
Вместо классического поиска флэта по ATR, Bollinger или объёму, Range Sentinel измеряет “рыночную энтропию” — насколько непредсказуемы изменения цены внутри окна времени.
Если энтропия низкая → цена «застряла» в рэндже.
Если энтропия резко растёт → начинается выход из консолидации.
📊 Что даёт инструмент: 💸
Показывает зоны накопления без использования объёмов.
Отлично выявляет “ложные пробои” — если энтропия не растёт, значит, это не импульс.
Может работать на любом таймфрейме (от минут до дневок).
Можно использовать в боте:
когда H < 1.0 → флэт,
когда H > 2.0 → начало импульса.
import ccxt
import numpy as np
import time
exchange = ccxt.binance()
symbol = "BTC/USDT"
tf = "1h"
def entropy(series, bins=20):
hist, _ = np.histogram(series, bins=bins, density=True)
hist = hist[hist > 0]
return -np.sum(hist * np.log2(hist))
def get_entropy(symbol, tf="1h", window=50):
ohlcv = exchange.fetch_ohlcv(symbol, timeframe=tf, limit=window)
changes = [(c[4] - c[1]) / c[1] for c in ohlcv]
return entropy(changes)
while True:
H = get_entropy(symbol)
print(f"Энтропия рынка: {H:.3f}")
if H < 1.0:
print("🟦 Рынок во флэте — возможна консолидация")
elif H > 2.0:
print("🟥 Выход из диапазона — начинается импульс")
time.sleep(60)
#инструмент
📌 Подпишись Crypto Python❗️
👍5🔥3
app.py
9.8 KB
📌Refill Predictor — прогнозер восстановления стакана (orderbook refill)🧑💻
Коротко — это практичный инструмент для исполнения крупных ордеров. Он в реальном-времени оценивает скорость восстановления (refill) объёма на ключевых уровнях стакана и даёт:
вероятность того, что заданный объём будет доступен на уровне за T секунд,
рекомендованный интервал дробления (delay между слайсами) и оптимальный offset лимитной заявки.
Почему полезно: статический снимок стакана мало что говорит — стакан часто рефилится за миллисекунды. Этот скрипт предсказывает рефил — даёт практические рекомендации для execution (market vs slices vs limit).
Идея / алгоритм (кратко): 🛠
1. Подключаемся к Binance depth stream (depth@100ms) по одной паре или нескольким парам.
2. На каждом уровне (например топ 10 уровней) отслеживаем изменения объёма во времени: появление/исчезновение и последующие пополнения.
3. Для каждого уровня считаем refill_rate = экспоненциальное среднее приходящего объёма в пределах ±Δцены (base/s).
4. По refill_rate моделируем вероятность появления требуемого объёма V в горизонте T как 1 - exp(-λ*T) (пуассон-приближенно) или более прямо: P = min(1, (expected_arrival * T) / V).
5. По всем уровням строим таблицу: уровень, текущий available, expected arrival per T, P(fill), рекомендованный action:
P≈1 и доступно → market / immediate limit,
P high but current small → slice with delay ≈ T_best,
P low → уменьшить долю или искать OTC.
#инструмент
📌 Подпишись Crypto Python❗️
Коротко — это практичный инструмент для исполнения крупных ордеров. Он в реальном-времени оценивает скорость восстановления (refill) объёма на ключевых уровнях стакана и даёт:
вероятность того, что заданный объём будет доступен на уровне за T секунд,
рекомендованный интервал дробления (delay между слайсами) и оптимальный offset лимитной заявки.
Почему полезно: статический снимок стакана мало что говорит — стакан часто рефилится за миллисекунды. Этот скрипт предсказывает рефил — даёт практические рекомендации для execution (market vs slices vs limit).
Идея / алгоритм (кратко): 🛠
1. Подключаемся к Binance depth stream (depth@100ms) по одной паре или нескольким парам.
2. На каждом уровне (например топ 10 уровней) отслеживаем изменения объёма во времени: появление/исчезновение и последующие пополнения.
3. Для каждого уровня считаем refill_rate = экспоненциальное среднее приходящего объёма в пределах ±Δцены (base/s).
4. По refill_rate моделируем вероятность появления требуемого объёма V в горизонте T как 1 - exp(-λ*T) (пуассон-приближенно) или более прямо: P = min(1, (expected_arrival * T) / V).
5. По всем уровням строим таблицу: уровень, текущий available, expected arrival per T, P(fill), рекомендованный action:
P≈1 и доступно → market / immediate limit,
P high but current small → slice with delay ≈ T_best,
P low → уменьшить долю или искать OTC.
#инструмент
📌 Подпишись Crypto Python❗️
👍3❤2🔥2
📌"Latency Trap" (ловушка задержки ликвидности)🧑💻
💡 Концепция🧨
Когда рынок резко движется, крупные лимитные ордера не успевают обновиться в книге — они “застывают” на старых уровнях.
Это создаёт краткий момент, когда:
движение кажется сильным,
но в стакане “дырки” в ликвидности,
и маркет-мейкеры за миллисекунды “откатывают” цену обратно, чтобы залить ликвидность заново.
Именно в эти моменты (в течение 1–5 секунд) и происходят самые частые микрореверсы.
Наша задача — поймать такие “дыры” и торговать в обратную сторону движения.
🧠 Логика:🛠️
1. Подключаемся к WebSocket Binance (stream depth@100ms).
2. Для каждого обновления стакана считаем:
изменение средней плотности ордеров в верхних 5 уровнях;
скорость изменения цены (дельта между best bid/ask).
3. Если:
цена выросла/упала > 0.3% за последние 3 секунды,
а плотность ликвидности в направлении движения упала на > 50%,
→ фиксируем “ликвидностную дыру”.
4. После этого ждём откат 0.1–0.2% — и входим в противоположную сторону.
#торговые_стратегии
📌 Подпишись Crypto Python❗️
💡 Концепция🧨
Когда рынок резко движется, крупные лимитные ордера не успевают обновиться в книге — они “застывают” на старых уровнях.
Это создаёт краткий момент, когда:
движение кажется сильным,
но в стакане “дырки” в ликвидности,
и маркет-мейкеры за миллисекунды “откатывают” цену обратно, чтобы залить ликвидность заново.
Именно в эти моменты (в течение 1–5 секунд) и происходят самые частые микрореверсы.
Наша задача — поймать такие “дыры” и торговать в обратную сторону движения.
🧠 Логика:🛠️
1. Подключаемся к WebSocket Binance (stream depth@100ms).
2. Для каждого обновления стакана считаем:
изменение средней плотности ордеров в верхних 5 уровнях;
скорость изменения цены (дельта между best bid/ask).
3. Если:
цена выросла/упала > 0.3% за последние 3 секунды,
а плотность ликвидности в направлении движения упала на > 50%,
→ фиксируем “ликвидностную дыру”.
4. После этого ждём откат 0.1–0.2% — и входим в противоположную сторону.
import asyncio
import json
import websockets
import numpy as np
from datetime import datetime
symbol = "btcusdt"
url = f"wss://stream.binance.com:9443/ws/{symbol}@depth5@100ms"
async def latency_trap():
prev_asks, prev_bids = [], []
prev_mid = None
history = []
async with websockets.connect(url) as ws:
print("📡 Listening for liquidity gaps...")
async for msg in ws:
data = json.loads(msg)
bids = np.array([[float(x[0]), float(x[1])] for x in data["bids"]])
asks = np.array([[float(x[0]), float(x[1])] for x in data["asks"]])
mid = (asks[0,0] + bids[0,0]) / 2
# Плотность ликвидности
bid_liq = bids[:,1].sum()
ask_liq = asks[:,1].sum()
history.append(mid)
if len(history) > 30:
history.pop(0)
if prev_mid:
price_change = (mid - prev_mid) / prev_mid * 100
liq_change = (bid_liq + ask_liq) / (sum(prev_bids) + sum(prev_asks) + 1e-9)
if abs(price_change) > 0.3 and liq_change < 0.5:
side = "SHORT" if price_change > 0 else "LONG"
print(f"⚡ {datetime.now().strftime('%H:%M:%S')} → {side} | Δ={price_change:.2f}% | Liquidity drop {liq_change:.2f}")
prev_mid = mid
prev_bids = bids[:,1]
prev_asks = asks[:,1]
asyncio.run(latency_trap())
#торговые_стратегии
📌 Подпишись Crypto Python❗️
👍7
📌Моделирование проскальзывания в зависимости от ликвидности🧑💻
Идея: 🧨
Инструмент принимает пару, плечо и сумму в USDT,
а возвращает среднюю цену, по которой реально откроется позиция при рыночной покупке с учётом объёма в стакане Binance Futures (USDT-M).
#инструмент
📌 Подпишись Crypto Python❗️
Идея: 🧨
Инструмент принимает пару, плечо и сумму в USDT,
а возвращает среднюю цену, по которой реально откроется позиция при рыночной покупке с учётом объёма в стакане Binance Futures (USDT-M).
import ccxt
def estimate_market_entry_price(symbol: str, leverage: int, balance_usdt: float, side='buy', fee_rate=0.0004, depth_limit=200):
"""
Оценка средней цены открытия рыночной позиции с учетом ликвидности Binance Futures (USDT-M).
:param symbol: Пара, например 'BTC/USDT'
:param leverage: Плечо, например 10
:param balance_usdt: Собственные средства (без учета плеча)
:param side: 'buy' или 'sell'
:param fee_rate: Комиссия Binance (по умолчанию 0.04%)
:param depth_limit: Глубина стакана для анализа
:return: dict с результатами
"""
exchange = ccxt.binance({
'options': {'defaultType': 'future'}
})
orderbook = exchange.fetch_order_book(symbol, limit=depth_limit)
position_value = balance_usdt * leverage
remaining_value = position_value
filled_value = 0
weighted_price = 0
# Для покупки — считаем по аскам, для продажи — по биддам
levels = orderbook['asks'] if side == 'buy' else orderbook['bids']
for price, volume in levels:
level_value = price * volume
if remaining_value > level_value:
filled_value += level_value
weighted_price += price * volume
remaining_value -= level_value
else:
filled_value += remaining_value
weighted_price += price * (remaining_value / price)
break
avg_price = weighted_price / (filled_value / price) # средняя цена
fees = position_value * fee_rate * 2
effective_entry = avg_price * (1 + fee_rate if side == 'buy' else 1 - fee_rate)
return {
'symbol': symbol,
'side': side,
'leverage': leverage,
'balance_usdt': balance_usdt,
'notional_value': position_value,
'avg_entry_price': round(avg_price, 4),
'effective_entry_price': round(effective_entry, 4),
'total_fees_usdt': round(fees, 4)
}
# 🔍 Пример использования:
result = estimate_market_entry_price('BTC/USDT', leverage=10, balance_usdt=1000, side='buy')
print(result)
#инструмент
📌 Подпишись Crypto Python❗️
👍5❤3