Crypto Python
819 subscribers
448 photos
26 files
455 links
Алготрейдинг 🤖 , работа с API бирж и агрегаторов 🌐 , автоматизации в крипто сфере📈 🚀
Ваши предложения📝 @binance_de
Download Telegram
m_s_l.py
8.3 KB
📌Microstate Mirror - (зеркало микросостояний стакана — детектор повторяющихся «микростанций» книги, которые исторически ведут к предсказуемому движению)🧑‍💻

Идея (коротко): 🧨

Мы превращаем каждый снимок стакана (Top-N уровней) в компактный вектор — микросостояние. Храним недавнюю историю таких микросостояний вместе с тем, что случилось с ценой через фиксированный горизонт (например, +5s или +1 бар).
Когда текущий микроснимок сильно похож (по косинусной/евклидовой близости) на набор исторически «предиктивных» микростанций, инструмент агрегирует исходы и выдаёт вероятностный прогноз — высока ли вероятность движения вверх/вниз и с каким ожиданием.
Это — гибрид orderbook-анализ + case-based reasoning: не индикаторы, а повторение реального поведения рынка.

Почему полезен: 💸

Детектит редко используемый признак: повторимость структур стакана, а не только поток сделок или свечи.

Работает в реальном времени: полезен как фильтр входа/разделения объёма.

Универсален: для скальпинга (секунды), интрадей (минуты) и для нескольких инструментов.

#инструмент

📌 Подпишись  Crypto Python❗️
👍6
📌"Liquidity Fade" - (игра против ложных уровней ликвидности) 🧑‍💻

🔍 Идея: 🚀

Крупные заявки в стакане часто используются для обмана толпы:

- ставят огромный ордер (например, на покупку), трейдеры думают «поддержка», заходят в лонг,

- ордер снимают — и рынок летит вниз.

Стратегия как раз строится на поимке этих фейковых кластеров ликвидности.

📌 Логика стратегии: 🧨

1. Мониторим стакан и ищем крупные заявки (по объёму).

2. Если такой кластер исчезает перед движением цены:

если это была заявка на покупку → открываем шорт;

если это была заявка на продажу → открываем лонг.

3. Стоп ставим за «фейковый уровень».

4. Тейк фиксируем на ближайшем реальном кластере ликвидности.

import asyncio
import json
import websockets
import time

SYMBOL = "btcusdt"
DEPTH_LEVELS = 50
BIG_ORDER_THRESHOLD = 100 # порог крупного ордера
ORDER_MEMORY = {}

async def liquidity_fade():
url = f"wss://stream.binance.com:9443/ws/{SYMBOL}@depth{DEPTH_LEVELS}@100ms"
print(f"🚀 Liquidity Fade strategy запущена для {SYMBOL.upper()}")

async with websockets.connect(url) as ws:
async for msg in ws:
data = json.loads(msg)
bids = [(float(p), float(q)) for p, q in data["b"]]
asks = [(float(p), float(q)) for p, q in data["a"]]

# проверяем крупные заявки
for p, q in bids + asks:
if q > BIG_ORDER_THRESHOLD:
ORDER_MEMORY[p] = time.time()

# проверяем исчезновение
current_prices = {p for p, q in bids + asks}
vanished = [p for p in list(ORDER_MEMORY.keys()) if p not in current_prices]

for p in vanished:
side = "buy" if p < bids[0][0] else "sell"
age = time.time() - ORDER_MEMORY[p]
if age < 2: # если исчез недавно
if side == "buy":
print(f"⚠️ Фейковая поддержка исчезла @ {p} → сигнал на ШОРТ")
else:
print(f"⚠️ Фейковое сопротивление исчезло @ {p} → сигнал на ЛОНГ")
del ORDER_MEMORY[p]

if __name__ == "__main__":
asyncio.run(liquidity_fade())

#торговые_стратегии

📌 Подпишись  Crypto Python❗️
👍4
📌"Volatility Cone Tracker" - (реальный конус волатильности в онлайне) 🧑‍💻

🔍 Идея: 🧨

Трейдеру важно понимать: текущая волатильность «нормальная» или рынок ведёт себя экстремально.

👉 Инструмент сравнивает реализованную волатильность на разных таймфреймах с её историческими средними и строит «конус»: диапазон ожидаемых значений.

Если текущая вола выходит за границы конуса → сигнал о необычном режиме рынка (повышенный риск или шанс на сильный тренд).

📌 Что делает: 🛠️

Подгружает свечи (например, 1m, 5m, 15m).

Считает реал. волатильность (стд. отклонение лог-доходностей).

Сравнивает с историческим распределением.

В консоли выводит:

🟢 Нормально

🟡 У верхней границы

🔴 Аномальная волатильность

import ccxt
import numpy as np
import time

SYMBOL = "BTC/USDT"
EXCHANGE = ccxt.binance()
LOOKBACK = 500 # кол-во свечей
TF = "1m"

def realized_volatility(returns):
return np.sqrt(np.mean(returns**2))

def volatility_cone():
ohlcv = EXCHANGE.fetch_ohlcv(SYMBOL, timeframe=TF, limit=LOOKBACK)
closes = np.array([c[4] for c in ohlcv])
log_ret = np.diff(np.log(closes))

window = 50
vols = [realized_volatility(log_ret[i:i+window]) for i in range(len(log_ret)-window)]
current_vol = realized_volatility(log_ret[-window:])

mean_vol = np.mean(vols)
std_vol = np.std(vols)

low, high = mean_vol - 2*std_vol, mean_vol + 2*std_vol

print(f"Текущая волатильность: {current_vol:.5f}")
if current_vol < low:
print("🟢 Рынок спокойный (ниже конуса)")
elif current_vol > high:
print("🔴 Аномально высокая волатильность!")
else:
print("🟡 В пределах нормы")

if __name__ == "__main__":
while True:
volatility_cone()
time.sleep(60)

#инструмент

📌 Подпишись  Crypto Python❗️
👍7🔥2
📌"Auction Imbalance Play" - (игра на дисбалансе аукциона в момент формирования цены) 🧑‍💻

🔍 Идея: 🧨

Рынок постоянно находится в состоянии «аукциона»: одни хотят купить, другие продать.
Когда дисбаланс между агрессивными покупателями (market buy) и продавцами (market sell) становится слишком большим, цена должна «сдвинуться», чтобы уравновесить спрос и предложение.

👉 Мы отслеживаем поток сделок (tape) и сравниваем:

сколько объёма прошло в сторону покупки,

сколько в сторону продажи.

Если разница > порога → ожидаем движение в сторону победивших.

📌 Логика: 🛠️

1. Подключаемся к потоку сделок (Binance trades stream).

2. В скользящем окне (например, 10 секунд) считаем суммарный buy volume и sell volume.

3. Если buy ≫ sell → открываем лонг.
Если sell ≫ buy → открываем шорт.

4. Закрываем сделку при возврате баланса или через фиксированный тайм-аут.

import asyncio
import websockets
import json
from collections import deque
import time

SYMBOL = "btcusdt"
WINDOW_SEC = 10
IMBALANCE_THRESHOLD = 2.0 # во сколько раз buy > sell или наоборот

trades_window = deque()

async def auction_imbalance():
url = f"wss://stream.binance.com:9443/ws/{SYMBOL}@trade"
print(f"📡 Auction Imbalance strategy запущена для {SYMBOL.upper()}")

async with websockets.connect(url) as ws:
async for msg in ws:
data = json.loads(msg)
price = float(data["p"])
qty = float(data["q"])
is_buyer_maker = data["m"] # True = sell, False = buy
ts = time.time()

trades_window.append((ts, qty, is_buyer_maker))

# чистим старые сделки
while trades_window and ts - trades_window[0][0] > WINDOW_SEC:
trades_window.popleft()

# считаем баланс
buy_vol = sum(q for t, q, m in trades_window if not m)
sell_vol = sum(q for t, q, m in trades_window if m)

if sell_vol > 0 and buy_vol / sell_vol > IMBALANCE_THRESHOLD:
print(f"🚀 ЛОНГ сигнал @ {price} | Buy/Sell = {buy_vol:.2f}/{sell_vol:.2f}")
elif buy_vol > 0 and sell_vol / buy_vol > IMBALANCE_THRESHOLD:
print(f"🔻 ШОРТ сигнал @ {price} | Buy/Sell = {buy_vol:.2f}/{sell_vol:.2f}")

if __name__ == "__main__":
asyncio.run(auction_imbalance())

#торговые_стратегии

📌 Подпишись  Crypto Python❗️
👍52
📌"Time Stretch Reversal" - (разворот по растяжению времени) 🧑‍💻

🔍 Идея: 🧨

Рынок движется не только по цене, но и во времени.

Когда импульс длится дольше обычного, но не даёт сильного результата по цене → это признак выдыхания движения.

Когда цена быстро достигает экстремума за необычно короткое время → это сигнал о возможном продолжении (инерция толпы).

👉 Мы анализируем время между локальными максимумами и минимумами.

📌 Правила: 🛠️

1. Выделяем swing-high и swing-low (например, через экстремум за N свечей).

2. Считаем:

ΔPrice = изменение цены,

ΔTime = кол-во баров между экстремумами.

3. Если ΔTime > среднее, но ΔPrice маленькое → рынок слабый, входим в контртренд.

4. Если ΔTime очень короткое, но ΔPrice большое → вероятно, движение продолжится → вход по тренду.

import ccxt
import pandas as pd
import numpy as np

SYMBOL = "BTC/USDT"
TF = "5m"
LOOKBACK = 500

ex = ccxt.binance()

def fetch_data():
ohlcv = ex.fetch_ohlcv(SYMBOL, TF, limit=LOOKBACK)
df = pd.DataFrame(ohlcv, columns=["ts","open","high","low","close","vol"])
df["dt"] = pd.to_datetime(df["ts"], unit="ms")
return df

def find_swings(df, n=3):
swings = []
for i in range(n, len(df)-n):
high = df["high"].iloc[i]
low = df["low"].iloc[i]
if high == max(df["high"].iloc[i-n:i+n+1]):
swings.append((df["dt"].iloc[i], df["close"].iloc[i], "H"))
if low == min(df["low"].iloc[i-n:i+n+1]):
swings.append((df["dt"].iloc[i], df["close"].iloc[i], "L"))
return swings

def analyze(swings):
signals = []
for i in range(2, len(swings)):
t1, p1, _ = swings[i-2]
t2, p2, _ = swings[i-1]
t3, p3, _ = swings[i]

dprice = abs(p3 - p2) / p2
dtime = (t3 - t2).total_seconds() / 60

avg_time = np.mean([(swings[j][0]-swings[j-1][0]).total_seconds()/60 for j in range(1,i)])

if dtime > 1.5*avg_time and dprice < 0.003:
signals.append((t3, p3, "REVERSAL"))
elif dtime < 0.5*avg_time and dprice > 0.01:
signals.append((t3, p3, "MOMENTUM"))
return signals

if __name__ == "__main__":
df = fetch_data()
swings = find_swings(df)
sigs = analyze(swings)
for s in sigs[-10:]:
print(s)

#торговые_стратегии

📌 Подпишись  Crypto Python❗️
👍6🔥3
📌"Market Memory Index" - (индекс рыночной памяти) 🧑‍💻

🔍 Идея: 🧨

Цена не всегда «помнит» прошлое одинаково.

В трендовых режимах каждый следующий бар коррелирует с предыдущими (есть инерция).

Во флэте рынок «забывает» направление (корреляция быстро уходит в ноль).

👉 Инструмент измеряет автокорреляцию доходностей на разных лагах и строит индекс «рыночной памяти».

📌 Что делает: 🛠️

Берёт последние N баров.

Считает лаговую корреляцию (например, 1–10 шагов).

Выводит индекс 0…1:

Близко к 1 → рынок «помнит» (инерционный режим → тренд).

Близко к 0 → рынок забывчивый (хаос → флэт).

import ccxt
import pandas as pd
import numpy as np

SYMBOL = "BTC/USDT"
TF = "5m"
LOOKBACK = 300

ex = ccxt.binance()

def fetch_data():
ohlcv = ex.fetch_ohlcv(SYMBOL, TF, limit=LOOKBACK)
df = pd.DataFrame(ohlcv, columns=["ts","o","h","l","c","v"])
df["ret"] = np.log(df["c"]).diff()
return df.dropna()

def market_memory_index(df, max_lag=10):
rets = df["ret"].values
corrs = []
for lag in range(1, max_lag+1):
x = rets[:-lag]
y = rets[lag:]
corr = np.corrcoef(x, y)[0,1]
corrs.append(corr)
return np.mean([abs(c) for c in corrs])

if __name__ == "__main__":
df = fetch_data()
mmi = market_memory_index(df)
if mmi > 0.5:
print(f"🟢 Рынок трендовый (MMI={mmi:.2f})")
elif mmi < 0.2:
print(f"🔴 Рынок хаотичный (MMI={mmi:.2f})")
else:
print(f"🟡 Нейтральный рынок (MMI={mmi:.2f})")

#инструмент

📌 Подпишись  Crypto Python❗️
👍8
📌"Импульсные ловушки"🧑‍💻

🔍 Идея: 🧨

Многие трейдеры «прыгают в рынок» после резкого движения (импульса). Но часто такие импульсы быстро выдыхаются и цена возвращается назад.
Мы используем это против толпы:

Если рынок сделал быстрый импульс вверх, но через несколько свечей не продолжил рост → открываем шорт.

Если импульс вниз быстро поглощается → открываем лонг.

📌 Логика входа: 🛠️

1. Берём короткий таймфрейм (1–5 мин).

2. Считаем относительное изменение цены за последние k свечей.

3. Если движение > X% (импульс), то ждём подтверждения:

если цена не обновляет хай/лоу импульса в течение N свечей → это «ловушка».

4. Входим против импульса.

5. Тейк-профит = середина диапазона импульса, стоп = за его экстремумом.

import ccxt
import pandas as pd
import numpy as np

SYMBOL = "BTC/USDT"
TF = "1m"
LOOKBACK = 200

ex = ccxt.binance()

def fetch_data():
ohlcv = ex.fetch_ohlcv(SYMBOL, TF, limit=LOOKBACK)
df = pd.DataFrame(ohlcv, columns=["ts","o","h","l","c","v"])
return df

def impulse_trap(df, k=5, threshold=0.004, hold=3):
signals = []
for i in range(k, len(df)-hold):
change = (df["c"].iloc[i] - df["c"].iloc[i-k]) / df["c"].iloc[i-k]
if abs(change) > threshold:
if change > 0: # импульс вверх
high = df["h"].iloc[i]
if all(df["h"].iloc[i+1:i+1+hold] < high):
signals.append((df["ts"].iloc[i], "SELL", df["c"].iloc[i]))
else: # импульс вниз
low = df["l"].iloc[i]
if all(df["l"].iloc[i+1:i+1+hold] > low):
signals.append((df["ts"].iloc[i], "BUY", df["c"].iloc[i]))
return signals

if __name__ == "__main__":
df = fetch_data()
traps = impulse_trap(df)
for t, side, price in traps:
print(f"{pd.to_datetime(t, unit='ms')} → {side} @ {price}")

#торговые_стратегии

📌 Подпишись  Crypto Python❗️
👍81
📌"Market Microstructure Lag Detector" - (детектор микроструктурного лага) 🧑‍💻

🔍 Идея: 🚀

На биржах иногда возникает лаг между движением цены и реакцией объёма.

В норме: рост цены сопровождается ростом объёмов.

В аномальных ситуациях: цена движется, но объём запаздывает (или наоборот).

👉 Этот инструмент измеряет сдвиг во времени между изменением цены и объёмом → показывает, есть ли «запаздывание реакции рынка».

📌 Что делает: 🛠️

1. Берёт последние N свечей.

2. Строит кросс-корреляцию между:

изменением цены,

изменением объёма.

3. Находит лаг (в свечах), где корреляция максимальна.

4. Выводит результат:

Лаг = 0 → рынок синхронен.

Лаг > 0 → объём опаздывает за ценой.

Лаг < 0 → объём идёт впереди (предупреждает движение).

Польза:💸

- Можно выявлять режимы, когда объём становится опережающим сигналом.

- Подходит для поиска «умных денег», которые входят заранее.

- Отличный фильтр для стратегий на пробои и импульсы.

import ccxt
import pandas as pd
import numpy as np

SYMBOL = "BTC/USDT"
TF = "1m"
LOOKBACK = 500

ex = ccxt.binance()

def fetch_data():
ohlcv = ex.fetch_ohlcv(SYMBOL, TF, limit=LOOKBACK)
df = pd.DataFrame(ohlcv, columns=["ts","o","h","l","c","v"])
df["ret"] = df["c"].pct_change().fillna(0)
df["vol_chg"] = df["v"].pct_change().fillna(0)
return df

def micro_lag(df, max_lag=10):
x = df["ret"].values
y = df["vol_chg"].values
lags = range(-max_lag, max_lag+1)
corrs = []
for lag in lags:
if lag < 0:
corr = np.corrcoef(x[:lag], y[-lag:])[0,1]
elif lag > 0:
corr = np.corrcoef(x[lag:], y[:-lag])[0,1]
else:
corr = np.corrcoef(x, y)[0,1]
corrs.append(corr)
best_idx = int(np.argmax(np.abs(corrs)))
return lags, corrs, lags[best_idx], corrs[best_idx]

if __name__ == "__main__":
df = fetch_data()
lags, corrs, best_lag, best_corr = micro_lag(df)
print(f"📊 Лучший лаг: {best_lag} свечей | Корреляция={best_corr:.2f}")
if best_lag > 0:
print(" Объём запаздывает за ценой")
elif best_lag < 0:
print("🔮 Объём предсказывает цену")
else:
print(" Цена и объём синхронны")

#инструмент

📌 Подпишись  Crypto Python❗️
👍3🔥2
📌"Noise-to-Signal Ratio" - (коэффициент шума к сигналу) 🧑‍💻

🔍 Идея: 🚀

Не всегда рынок двигается «осмысленно». Иногда цена просто «шумит» в узком диапазоне, и любые сигналы стратегий становятся ложными.

👉 Этот инструмент измеряет отношение шумовых колебаний к направленному движению.

Если шум >> тренд → лучше не торговать (рынок «грязный»).

Если тренд >> шум → высокая вероятность эффективных сделок.

📌 Что делает: 🛠️

1. Берёт окно последних N свечей.

2. Считает:

Общее движение;

Сумму всех колебаний;

3. Рассчитывает коэффициент NSR

NSR ≈ 1 → движение чистое (трендовое).

NSR >> 1 → рынок шумный, нет смысла торговать пробои.

import ccxt
import pandas as pd
import numpy as np

SYMBOL = "BTC/USDT"
TF = "5m"
LOOKBACK = 200

ex = ccxt.binance()

def fetch_data():
ohlcv = ex.fetch_ohlcv(SYMBOL, TF, limit=LOOKBACK)
df = pd.DataFrame(ohlcv, columns=["ts","o","h","l","c","v"])
return df

def noise_signal_ratio(df, window=50):
closes = df["c"].iloc[-window:].values
total_move = abs(closes[-1] - closes[0])
swings = np.sum(abs(np.diff(closes)))
if total_move == 0:
return float("inf")
return swings / total_move

if __name__ == "__main__":
df = fetch_data()
nsr = noise_signal_ratio(df)
print(f"📊 Noise-to-Signal Ratio: {nsr:.2f}")
if nsr < 2:
print("🔥 Чистый трендовый рынок — пробойные стратегии в приоритете")
elif nsr < 5:
print(" Смешанный режим — подойдёт скальпинг")
else:
print("🌪 Шумный рынок — лучше не торговать пробои")

#инструмент

📌 Подпишись  Crypto Python❗️
👍4🔥4
📌"Импульсные ритмы" - (торговля по ритмике микродвижений) 🧑‍💻

🔍 Идея: 🧨

Рынок двигается «рывками» — серии маленьких импульсов в одном направлении часто означают, что алгоритмы двигают цену.

Если появляется серия импульсов одной стороны (например, несколько свечей подряд с телом > X%), это значит, что активные участники толкают рынок.

Если после серии идёт затухание (свечи становятся меньше) → сигнал к развороту.

Если серия усиливается → продолжаем в сторону движения.

📌 Логика входа: 💸

1. Находим последовательности из k свечей с телами больше threshold.

2. Если каждая следующая свеча меньше предыдущей → ждём разворот.

3. Если каждая следующая больше → входим в сторону импульса.

4. Выход: по противоположному импульсу или при смене «ритма».

import ccxt
import pandas as pd

SYMBOL = "BTC/USDT"
TF = "1m"
LOOKBACK = 200

ex = ccxt.binance()

def fetch_data():
ohlcv = ex.fetch_ohlcv(SYMBOL, TF, limit=LOOKBACK)
df = pd.DataFrame(ohlcv, columns=["ts","o","h","l","c","v"])
df["body"] = abs(df["c"] - df["o"])
df["dir"] = df["c"] > df["o"]
return df

def impulse_rhythm(df, k=3, threshold=0.001):
signals = []
for i in range(k, len(df)):
seq = df.iloc[i-k+1:i+1]
if all(seq["body"] > seq["c"].iloc[-1] * threshold):
if seq["dir"].all(): # все вверх
if seq["body"].is_monotonic_increasing:
signals.append((df["ts"].iloc[i], "BUY", df["c"].iloc[i]))
elif seq["body"].is_monotonic_decreasing:
signals.append((df["ts"].iloc[i], "SELL", df["c"].iloc[i]))
elif (~seq["dir"]).all(): # все вниз
if seq["body"].is_monotonic_increasing:
signals.append((df["ts"].iloc[i], "SELL", df["c"].iloc[i]))
elif seq["body"].is_monotonic_decreasing:
signals.append((df["ts"].iloc[i], "BUY", df["c"].iloc[i]))
return signals

if __name__ == "__main__":
df = fetch_data()
sigs = impulse_rhythm(df)
for t, side, price in sigs:
print(f"{pd.to_datetime(t, unit='ms')} → {side} @ {price}")

#торговые_стратегии

📌 Подпишись  Crypto Python❗️
👍7
📌"Ценовой маятник" 🧑‍💻

🔍 Идея: 🚀

Цена на коротких интервалах ведёт себя как маятник:

резкий рывок → накопление «кинетической энергии»,

затем возврат к равновесию.

Мы ловим эти отклонения от равновесной точки и зарабатываем на возврате.

📌 Логика входа: 💸

1. Считаем «центр равновесия» цены = скользящее среднее по N свечам.

2. Измеряем отклонение от центра в процентах.

3. Если отклонение > X%, открываем позицию в обратную сторону (ждём возврата маятника).

4. Выход — возврат цены к центру (тейк), стоп — за пределами расширенного диапазона.

import ccxt
import pandas as pd
import numpy as np

SYMBOL = "BTC/USDT"
TF = "5m"
LOOKBACK = 300

ex = ccxt.binance()

def fetch_data():
ohlcv = ex.fetch_ohlcv(SYMBOL, TF, limit=LOOKBACK)
df = pd.DataFrame(ohlcv, columns=["ts","o","h","l","c","v"])
return df

def pendulum_strategy(df, n=50, threshold=0.02):
df["center"] = df["c"].rolling(n).mean()
df = df.dropna()
signals = []
for i in range(len(df)):
price = df["c"].iloc[i]
center = df["center"].iloc[i]
deviation = (price - center) / center
if deviation > threshold:
signals.append((df["ts"].iloc[i], "SELL", price))
elif deviation < -threshold:
signals.append((df["ts"].iloc[i], "BUY", price))
return signals

if __name__ == "__main__":
df = fetch_data()
sigs = pendulum_strategy(df)
for t, side, price in sigs[-5:]:
print(f"{pd.to_datetime(t, unit='ms')} → {side} @ {price}")

#торговые_стратегии

📌 Подпишись  Crypto Python❗️
👍3🔥31
📌"Радар крупных ордеров" 🧑‍💻

📌 Идея: 🧨

На биржах часто выставляют айсберг-ордера или «стены» в стакане, которые могут:

- удерживать цену,

- создавать иллюзию спроса/предложения,

- сигнализировать о возможном развороте.


👉 Этот инструмент в реальном времени сканирует ордербук и подсвечивает аномально крупные заявки.

import ccxt
import time

SYMBOL = "BTC/USDT"
DEPTH = 20
THRESHOLD = 50 # минимальный размер ордера в BTC для "аномалии"

ex = ccxt.binance()

def radar():
orderbook = ex.fetch_order_book(SYMBOL, limit=DEPTH)
bids = orderbook["bids"]
asks = orderbook["asks"]

big_bids = [(p, v) for p, v in bids if v > THRESHOLD]
big_asks = [(p, v) for p, v in asks if v > THRESHOLD]

if big_bids:
print("🟢 Крупные покупки:")
for p, v in big_bids:
print(f" {v:.2f} BTC @ {p}")

if big_asks:
print("🔴 Крупные продажи:")
for p, v in big_asks:
print(f" {v:.2f} BTC @ {p}")

if __name__ == "__main__":
while True:
radar()
time.sleep(3)

#инструмент

📌 Подпишись  Crypto Python❗️
👍61
📌"Барометр рынка"🧑‍💻

📌 Идея: 🧨

Вместо того, чтобы смотреть на RSI/МАСD, мы можем оценивать:

сколько свечей подряд закрываются зелёными,

сколько — красными,

и какова их средняя амплитуда.

👉 Это создаёт «барометр»: преобладает ли давление покупателей или продавцов.

🎯 Польза: 💸

- Быстро видно, кто контролирует рынок — покупатели или продавцы.

- Можно использовать как фильтр для стратегий (входить только, если «барометр» за тебя).

- Помогает оценивать моментум без стандартных индикаторов.

import ccxt
import pandas as pd

SYMBOL = "BTC/USDT"
TF = "5m"
LOOKBACK = 100

ex = ccxt.binance()

def fetch_data():
ohlcv = ex.fetch_ohlcv(SYMBOL, TF, limit=LOOKBACK)
df = pd.DataFrame(ohlcv, columns=["ts","o","h","l","c","v"])
return df

def market_barometer(df, streak_limit=5):
df["color"] = df.apply(lambda x: "green" if x["c"] > x["o"] else "red", axis=1)
df["body"] = abs(df["c"] - df["o"])

streaks = []
streak, prev = 0, None

for i, row in df.iterrows():
if row["color"] == prev:
streak += 1
else:
streak = 1
prev = row["color"]
if streak >= streak_limit:
streaks.append((row["ts"], row["color"], streak, row["body"]))

return streaks

if __name__ == "__main__":
df = fetch_data()
sigs = market_barometer(df)
for t, col, s, b in sigs[-5:]:
print(f"{pd.to_datetime(t, unit='ms')} → {col.upper()} streak x{s}, avg body={b:.2f}")

#инструмент

📌 Подпишись  Crypto Python❗️
👍61
📌"Импульс толпы" 🧑‍💻

🔍 Идея: 🚀

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

👉 Мы отслеживаем скорость изменения цены и входим в сторону «первой волны», если объём подтверждает силу.

📌 Логика: 🧨

1. Считаем скорость движения цены = разница закрытия за последние k свечей.

2. Если скорость > порога и сопровождается повышенным объёмом → сигнал.

3. Входим в сторону импульса, держим позицию коротко (2–5 свечей).

4. Стоп — за началом импульса, тейк — фиксированный или по обратному импульсу.

import ccxt
import pandas as pd
import numpy as np

SYMBOL = "BTC/USDT"
TF = "1m"
LOOKBACK = 200

ex = ccxt.binance()

def fetch_data():
ohlcv = ex.fetch_ohlcv(SYMBOL, TF, limit=LOOKBACK)
df = pd.DataFrame(ohlcv, columns=["ts","o","h","l","c","v"])
return df

def crowd_impulse_strategy(df, k=3, vol_mult=2, speed_thr=0.003):
df["ret"] = df["c"].pct_change(k)
avg_vol = df["v"].rolling(50).mean()
signals = []
for i in range(len(df)):
if i < k:
continue
speed = df["ret"].iloc[i]
vol = df["v"].iloc[i]
if speed > speed_thr and vol > avg_vol.iloc[i] * vol_mult:
signals.append((df["ts"].iloc[i], "BUY", df["c"].iloc[i]))
elif speed < -speed_thr and vol > avg_vol.iloc[i] * vol_mult:
signals.append((df["ts"].iloc[i], "SELL", df["c"].iloc[i]))
return signals

if __name__ == "__main__":
df = fetch_data()
sigs = crowd_impulse_strategy(df)
for t, side, price in sigs[-5:]:
print(f"{pd.to_datetime(t, unit='ms')} → {side} @ {price}")

#торговые_стратегии

📌 Подпишись  Crypto Python❗️
👍81
📌"Радар резких движений"🧑‍💻

📌 Идея: 💸

Часто сильные движения происходят в течение пары секунд или минут. Если их вовремя заметить, можно:

- войти в импульс,

- или зафиксировать прибыль, если движение против позиции.


👉 Этот инструмент отслеживает мгновенные всплески волатильности и сигналит прямо в консоль.

import ccxt
import pandas as pd
import time

SYMBOL = "BTC/USDT"
TF = "1m"
LOOKBACK = 50
THRESHOLD = 0.003 # 0.3% за минуту

ex = ccxt.binance()

def fetch_data():
ohlcv = ex.fetch_ohlcv(SYMBOL, TF, limit=LOOKBACK)
df = pd.DataFrame(ohlcv, columns=["ts","o","h","l","c","v"])
return df

def radar(df):
df["ret"] = df["c"].pct_change()
last = df.iloc[-1]
if abs(last["ret"]) > THRESHOLD:
direction = "📈 ВСПЛЕСК ВВЕРХ" if last["ret"] > 0 else "📉 ВСПЛЕСК ВНИЗ"
print(f"{pd.to_datetime(last['ts'], unit='ms')} — {direction} {last['ret']*100:.2f}%")

if __name__ == "__main__":
while True:
try:
df = fetch_data()
radar(df)
time.sleep(10)
except Exception as e:
print("Ошибка:", e)
time.sleep(5)

#инструмент

📌 Подпишись  Crypto Python❗️
4👍4
📌"Поглощение агрессора" 🧑‍💻

🔍 Идея: 🚀

Когда рынок двигается в одну сторону, всегда есть «агрессор» — те, кто толкает цену ордерами по рынку. Но иногда лимитные заявки полностью поглощают их напор: свеча идёт в одну сторону, но закрывается в другую.

👉 Это момент, когда инициатива переходит к противоположной стороне.


📌 Логика: 🧨

1. Ищем свечи, у которых:

- тело большое,

- направление противоположно предыдущей свече,

- а объём выше среднего.

2. Входим в сторону свечи-поглотителя.

3. Стоп — за максимум/минимум предыдущей свечи.

4. Тейк — фиксированный R:R (например, 2:1).

import ccxt
import pandas as pd

SYMBOL = "BTC/USDT"
TF = "5m"
LOOKBACK = 300

ex = ccxt.binance()

def fetch_data():
ohlcv = ex.fetch_ohlcv(SYMBOL, TF, limit=LOOKBACK)
df = pd.DataFrame(ohlcv, columns=["ts","o","h","l","c","v"])
return df

def absorption_strategy(df, vol_mult=1.5):
avg_vol = df["v"].rolling(50).mean()
signals = []

for i in range(1, len(df)):
prev = df.iloc[i-1]
curr = df.iloc[i]

# свеча поглощает предыдущую
if curr["c"] > curr["o"] and prev["c"] < prev["o"] and curr["c"] >= prev["o"] and curr["v"] > avg_vol.iloc[i]*vol_mult:
signals.append((curr["ts"], "BUY", curr["c"]))

elif curr["c"] < curr["o"] and prev["c"] > prev["o"] and curr["c"] <= prev["o"] and curr["v"] > avg_vol.iloc[i]*vol_mult:
signals.append((curr["ts"], "SELL", curr["c"]))

return signals

if __name__ == "__main__":
df = fetch_data()
sigs = absorption_strategy(df)
for t, side, price in sigs[-5:]:
print(f"{pd.to_datetime(t, unit='ms')} → {side} @ {price}")

#торговые_стратегии

📌 Подпишись  Crypto Python❗️
4👍4
📌"Алерт уровней"💸

📌 Идея: 🧨

Очень часто трейдер ждёт пробоя или касания конкретных уровней (поддержка/сопротивление, хай дня, психологические уровни).

👉 Этот инструмент будет в реальном времени следить за ценой и сигналить в консоль, когда уровень достигнут или пробит.

Польза: 💸

Следит за важными зонами без постоянного взгляда на график.

Работает как «сторожевой пёс» — сразу сообщает, когда цена рядом с ключевым уровнем.

Можно использовать для:

- уровней Фибоначчи,

- сильных хай/лоу,

- круглых чисел (60000, 65000 и т.д.).

import ccxt
import time

SYMBOL = "BTC/USDT"
LEVELS = [60000, 59000, 60500] # отслеживаемые уровни
THRESHOLD = 50 # допустимое отклонение в $

ex = ccxt.binance()

def check_levels():
ticker = ex.fetch_ticker(SYMBOL)
price = ticker["last"]
for lvl in LEVELS:
if abs(price - lvl) <= THRESHOLD:
print(f"🚨 Цена {price} близка к уровню {lvl} (±{THRESHOLD})")

if __name__ == "__main__":
while True:
try:
check_levels()
time.sleep(5)
except Exception as e:
print("Ошибка:", e)
time.sleep(5)

#инструмент

📌 Подпишись  Crypto Python❗️
👍4🔥4
📌"Пружина"🧑‍💻

🔍 Идея: 🚀

Цена на рынке часто зажимается в узкий диапазон («сжимается как пружина»), после чего следует резкий выход.

👉 Мы ловим момент сжатия и торгуем пробой в сторону выхода.

📌 Логика: 🧨

1. Считаем диапазон свечей = High – Low.

2. Если несколько свечей подряд имеют диапазон меньше среднего → «сжатие пружины».

3. Когда цена выходит за границу диапазона этих свечей → открываем позицию в сторону пробоя.

4. Стоп — за противоположной границей диапазона, тейк — в 2–3 раза больше.

import ccxt
import pandas as pd
import numpy as np

SYMBOL = "BTC/USDT"
TF = "5m"
LOOKBACK = 200

ex = ccxt.binance()

def fetch_data():
ohlcv = ex.fetch_ohlcv(SYMBOL, TF, limit=LOOKBACK)
df = pd.DataFrame(ohlcv, columns=["ts","o","h","l","c","v"])
return df

def spring_strategy(df, window=20, compress_bars=5, thr=0.5):
df["range"] = df["h"] - df["l"]
avg_range = df["range"].rolling(window).mean()
signals = []

for i in range(window+compress_bars, len(df)):
recent = df.iloc[i-compress_bars:i]
if (recent["range"] < avg_range.iloc[i]*thr).all():
box_high = recent["h"].max()
box_low = recent["l"].min()
price = df["c"].iloc[i]
ts = df["ts"].iloc[i]

if price > box_high:
signals.append((ts, "BUY", price))
elif price < box_low:
signals.append((ts, "SELL", price))

return signals

if __name__ == "__main__":
df = fetch_data()
sigs = spring_strategy(df)
for t, side, price in sigs[-5:]:
print(f"{pd.to_datetime(t, unit='ms')} → {side} @ {price}")

#торговые_стратегии

📌 Подпишись  Crypto Python❗️
👍7
📌"Давка ликвидности"🧑‍💻

🔍 Идея: 🧨

Когда свеча делает длинный хвост (тенень), это часто сигнал, что рынок собрал стопы и вернулся обратно.

👉 Мы входим в сторону противоположную хвосту, так как там уже снята ликвидность.

📌 Логика: 💸

1. Определяем свечи с длинным хвостом (тело < 30% от всей свечи, тень > 60%).

2. Если длинная нижняя тень → сигнал на покупку.

3. Если длинная верхняя тень → сигнал на продажу.

4. Стоп за тенью, тейк = 2× стоп.

import ccxt
import pandas as pd

SYMBOL = "BTC/USDT"
TF = "5m"
LOOKBACK = 300

ex = ccxt.binance()

def fetch_data():
ohlcv = ex.fetch_ohlcv(SYMBOL, TF, limit=LOOKBACK)
df = pd.DataFrame(ohlcv, columns=["ts","o","h","l","c","v"])
return df

def liquidity_squeeze(df, body_thr=0.3, wick_thr=0.6):
signals = []
for i in range(len(df)):
o, h, l, c = df.iloc[i][["o","h","l","c"]]
body = abs(c - o)
rng = h - l
upper = h - max(o, c)
lower = min(o, c) - l

if rng == 0:
continue

body_ratio = body / rng
upper_ratio = upper / rng
lower_ratio = lower / rng

# длинная нижняя тень
if body_ratio < body_thr and lower_ratio > wick_thr:
signals.append((df["ts"].iloc[i], "BUY", c))
# длинная верхняя тень
elif body_ratio < body_thr and upper_ratio > wick_thr:
signals.append((df["ts"].iloc[i], "SELL", c))

return signals

if __name__ == "__main__":
df = fetch_data()
sigs = liquidity_squeeze(df)
for t, side, price in sigs[-5:]:
print(f"{pd.to_datetime(t, unit='ms')} → {side} @ {price}")

#торговые_стратегии

📌 Подпишись  Crypto Python❗️
5👍3
📌"Асинхронный компас рынков"🧑‍💻

📌 Идея: 🧨

Часто одни монеты начинают движение раньше других (например, ETH идёт за BTC, а альты идут за ETH).

👉 Этот инструмент ищет лидера и ведомых: какая пара двигается первой, а какие повторяют её с лагом.

🎯 Польза: 💸

- Показывает, кто ведёт рынок, а кто только догоняет.

- Можно заранее входить в альты, если «лидер» уже дал сигнал.

- Подходит для построения парных и межрыночных стратегий.

import ccxt
import pandas as pd
import numpy as np

ex = ccxt.binance()

SYMBOLS = ["BTC/USDT", "ETH/USDT", "SOL/USDT", "BNB/USDT"]
TF = "5m"
LOOKBACK = 100

def fetch(symbol):
ohlcv = ex.fetch_ohlcv(symbol, TF, limit=LOOKBACK)
df = pd.DataFrame(ohlcv, columns=["ts","o","h","l","c","v"])
df["ret"] = df["c"].pct_change()
return df[["ts","ret"]]

def market_compass(symbols):
data = {s: fetch(s)["ret"].dropna().values for s in symbols}
matrix = pd.DataFrame(index=symbols, columns=symbols)

for s1 in symbols:
for s2 in symbols:
if s1 == s2:
matrix.loc[s1,s2] = 1.0
else:
corr = np.corrcoef(data[s1], data[s2])[0,1]
matrix.loc[s1,s2] = round(corr,3)

return matrix

if __name__ == "__main__":
compass = market_compass(SYMBOLS)
print("📊 Корреляции движений (лидеры vs ведомые):")
print(compass)

#инструмент

📌 Подпишись  Crypto Python❗️
👍8
📌«Охота на толпу»🧑‍💻

🔑 Идея: 💸

Большинство трейдеров заходит слишком поздно — после резкого движения.

👉 Эта стратегия ищет точку, где толпа уже в позиции, и работает против неё, если рынок показывает слабость.

📌 Логика: 🧨

1. Отслеживаем резкий импульс вверх/вниз (например, движение >2% за ≤3 минуты).

2. Смотрим, появилась ли стабильность объёма после импульса (толпа входит).

3. Если цена не продолжает движение (консолидация), а начинает давать обратные свечи,
→ входим против направления импульса.

4. Выход — при возврате хотя бы на 30–50% от движения импульса.

import ccxt
import pandas as pd

ex = ccxt.binance()

PAIR = "BTC/USDT"
TF = "1m"
LOOKBACK = 200

def fetch_data():
ohlcv = ex.fetch_ohlcv(PAIR, TF, limit=LOOKBACK)
df = pd.DataFrame(ohlcv, columns=["ts","o","h","l","c","v"])
df["ret"] = df["c"].pct_change()
return df

def detect_crowd_trap(df):
# шаг 1: ищем резкий импульс
df["impulse"] = abs(df["ret"]) > 0.02 # 2% за свечу
signals = []

for i in range(2, len(df)):
if df["impulse"].iloc[i]:
direction = "long" if df["ret"].iloc[i] > 0 else "short"
# шаг 2: проверяем слабость
if (df["c"].iloc[i] < df["c"].iloc[i-1] and direction=="long") or \
(df["c"].iloc[i] > df["c"].iloc[i-1] and direction=="short"):
signals.append((df["ts"].iloc[i], "reverse_" + direction))

return signals

if __name__ == "__main__":
df = fetch_data()
sigs = detect_crowd_trap(df)
for s in sigs:
print("📌 Сигнал:", s)

#торговые_стратегии

📌 Подпишись  Crypto Python❗️
👍62