Crypto Python
819 subscribers
448 photos
26 files
455 links
Алготрейдинг 🤖 , работа с API бирж и агрегаторов 🌐 , автоматизации в крипто сфере📈 🚀
Ваши предложения📝 @binance_de
Download Telegram
📌Echo Rebound” (Эхо-отскок цены)🧑‍💻

Тип: скальпинг/интрадей

Платформа: спот 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%.

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 секунд (всё — микро-реакция).

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❗️
👍51
📌Volatility Pulse” — живой пульс волатильности рынка 🧑‍💻

💡 Идея: 🧨

Инструмент отслеживает реальную рыночную активность — темп изменения цены и объёма за секунду.
Он показывает, какие пары “оживают” прямо сейчас, ещё до того, как начнётся движение.
То есть ты видишь импульс в момент его зарождения, а не после свечи.

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) вычисляется:

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% от среднего — выводится предупреждение ⚠️, что рынок переходит в “нагруженное состояние”.

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❗️
👍52
📌Echo Reversal” — стратегия отзвуков инерции🧑‍💻

💡 Идея: 🧨

После любого сильного движения (вверх или вниз) рынок часто делает коррекционный отклик — эхо.
Если движение быстро затухает (цена перестаёт ускоряться), вероятен реверс, который длится несколько минут.

Ты ловишь этот момент, когда импульс выдыхается, а рынок ещё не перешёл в боковик.

🧩 Принцип работы: 🛠️

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🔥31
📌Market Friction Meter” — измеритель трения рынка🧑‍💻

💡 Идея: 🧨

Когда рынок движется “легко”, ордера исполняются плавно, цена быстро проходит уровни.
Но когда движение замедляется, а ордера начинают “вязнуть” в стакане — это рыночное трение.
Оно часто предшествует развороту или импульсу (в зависимости от стороны).

Инструмент оценивает, насколько “тяжело” движется цена, вычисляя сопротивление в стакане.

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❗️
👍62
📌Паническая тишина” (Panic Silence)🧑‍💻

Тип: Скальпинг/интрадей
Рынок: Спот
Основа: Реакция толпы и структура ордеров, без индикаторов

💡 Идея: 🧨

Рынок никогда не падает или не растёт бесконечно. После паники (всплеска объёма и движения) наступает тишина — момент, когда:

объёмы резко снижаются,

спред немного сужается,

движение будто “замирает”.

Но именно в этот момент маркетмейкеры и крупные игроки начинают обратные наборы позиций.
Мы используем этот микросигнал — “тишину после паники” — как точку входа.

⚙️ Условия входа: 🛠️

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🔥41
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❗️
👍5🔥2
📌Order Exhaustion Trap” — ловушка выдохшегося тренда🧑‍💻

💡 Идея: 🧨

Каждое устойчивое движение (вверх или вниз) в какой-то момент выдыхается —
скорость ордеров падает, спред стабилизируется, но цена всё ещё ползёт в ту же сторону.

Это “зомби-тренд”: покупатели или продавцы продолжают давить инерционно,
а ликвидность уже перераспределена, и вскоре наступает резкий разворот.

Стратегия ищет такие моменты, когда движение выглядит “живым”,
но внутри рынка ордерный поток уже ослаб.

⚙️ Принцип работы: 🛠️

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 секунд), иначе это может быть тренд.

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 с изменением цены.
Если давление растёт, но цена стоит → готовится импульс.

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❗️
👍61
app.py
10 KB
📌Order Flow DNA — визуализатор структуры ордеров по логике “генома рынка”🧑‍💻

💡 Суть идеи: 🧨

Это консольный (или веб) инструмент, который не показывает свечи или объёмы, а строит “генетический код” рынка — строку из символов, отражающих микро-поведение цены.

🔍 Как это работает: 🛠

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 резко ↓ — рынок “расслабился” (затухание, выдох).

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❗️
👍81
📌Shadow Depth Break” - (торговля по «теням» стакана — следим за тем, чего нет) 🧑‍💻

💡 Суть: 🧨

Обычно все анализируют то, что есть в стакане (цены и объёмы).
А эта стратегия анализирует то, чего там нет — пустоты, которые формируются, когда лимитные ордера внезапно исчезают на определённых уровнях.

Когда крупные участники убирают защитные ордера (особенно с одной стороны), рынок почти всегда “проваливается” в эту дыру ликвидности.

🔍 Принцип: 🛠️

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❗️
👍71
📌"Market Fracture Map" (Карта рыночных переломов)🧑‍💻

💡 Суть идеи: 🧨

Большинство трейдеров видят рынок как “цены”.

Этот инструмент показывает где рынок ломается структурно — то есть, где нарушается естественный поток сделок и ликвидности.

> Это не индикатор и не стратегия — это сканер микроструктуры, который визуализирует точки расхождения между ценой и потоком сделок.

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 уровнях,

считаем коэффициент дисбаланса:

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. Закрытие — по обратному импульсу или через фиксированный риск/прибыль.

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❗️
👍41
📌Order Heat Echo” — карта термошума ордеров🧑‍💻

💡 Концепция: 🧨

Все биржи полны микроколебаний, которые не видны на графике.
Каждая отмена или установка ордера создаёт “тепловой шум” — его можно визуализировать.

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❗️
👍71