📌"Adaptive Liquidity Trap"🧑💻
🧠 Идея:🚀
1. Вычисляется динамический диапазон ликвидности на основе объёма и спреда.
2. Если цена резко уходит за этот диапазон — вероятен ложный пробой.
3. Возврат в диапазон после прокола — сигнал на вход в противоположную сторону.
📊 Условия:🧨
- Вычисляется средний true spread: (high - low) / close
- Вычисляется волатильность и объём на 20 последних свечах
Если:
- Цена проколола границу диапазона ликвидности
- Объём выше среднего
- И следующая свеча вернулась обратно
→ сигнал на вход внутрь диапазона
🧩 Логика сигналов:💸
LONG, если был прокол вниз и возврат
SHORT, если был прокол вверх и возврат
#торговые_стратегии
📌 Подпишись Crypto Python❗️
🧠 Идея:🚀
1. Вычисляется динамический диапазон ликвидности на основе объёма и спреда.
2. Если цена резко уходит за этот диапазон — вероятен ложный пробой.
3. Возврат в диапазон после прокола — сигнал на вход в противоположную сторону.
📊 Условия:🧨
- Вычисляется средний true spread: (high - low) / close
- Вычисляется волатильность и объём на 20 последних свечах
Если:
- Цена проколола границу диапазона ликвидности
- Объём выше среднего
- И следующая свеча вернулась обратно
→ сигнал на вход внутрь диапазона
🧩 Логика сигналов:💸
LONG, если был прокол вниз и возврат
SHORT, если был прокол вверх и возврат
import ccxt
import pandas as pd
import time
symbol = 'BTC/USDT'
timeframe = '15m'
limit = 100
exchange = ccxt.binance()
def fetch_data():
ohlcv = exchange.fetch_ohlcv(symbol, timeframe, limit=limit)
df = pd.DataFrame(ohlcv, columns=['timestamp', 'open', 'high', 'low', 'close', 'volume'])
df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms')
return df
def generate_signal(df):
df['spread'] = (df['high'] - df['low']) / df['close']
df['avg_spread'] = df['spread'].rolling(window=20).mean()
df['avg_volume'] = df['volume'].rolling(window=20).mean()
last = df.iloc[-1]
prev = df.iloc[-2]
upper_bound = df['high'][-20:].mean() + df['avg_spread'].iloc[-1]
lower_bound = df['low'][-20:].mean() - df['avg_spread'].iloc[-1]
signal = None
if prev['low'] < lower_bound and last['close'] > lower_bound and last['volume'] > df['avg_volume'].iloc[-1]:
signal = "🟢 LONG сигнал: возврат в зону ликвидности"
elif prev['high'] > upper_bound and last['close'] < upper_bound and last['volume'] > df['avg_volume'].iloc[-1]:
signal = "🔴 SHORT сигнал: возврат в зону ликвидности"
return signal
while True:
try:
df = fetch_data()
signal = generate_signal(df)
if signal:
print(f"[{pd.Timestamp.now().strftime('%Y-%m-%d %H:%M:%S')}] {signal}")
else:
print(f"[{pd.Timestamp.now().strftime('%Y-%m-%d %H:%M:%S')}] 🔍 Нет сигнала")
time.sleep(60)
except Exception as e:
print("Ошибка:", e)
time.sleep(60)
#торговые_стратегии
📌 Подпишись Crypto Python❗️
1❤3👍3
📌"Сентимент Индикатор из Ордербука (Order Book Sentiment Tracker)"🧑💻
📌 Идея:🚀
Создаёт оценку настроений (bullish/bearish) на основе глубины стакана (order book). В отличие от классических индикаторов, он использует реальное распределение заявок на покупку и продажу в режиме реального времени.
🧠 Как работает:🛠️
1. С помощью ccxt подключается к Binance.
2. Загружает глубину стакана (order book).
3. Сравнивает суммарный объём заявок выше текущей цены (ask) и ниже текущей цены (bid).
4. Вычисляет имбаланс и определяет:
Bullish, если ниже цены заявок больше.
Bearish, если выше цены заявок больше.
Neutral, если равновесие.
#инструмент
📌 Подпишись Crypto Python❗️
📌 Идея:🚀
Создаёт оценку настроений (bullish/bearish) на основе глубины стакана (order book). В отличие от классических индикаторов, он использует реальное распределение заявок на покупку и продажу в режиме реального времени.
🧠 Как работает:🛠️
1. С помощью ccxt подключается к Binance.
2. Загружает глубину стакана (order book).
3. Сравнивает суммарный объём заявок выше текущей цены (ask) и ниже текущей цены (bid).
4. Вычисляет имбаланс и определяет:
Bullish, если ниже цены заявок больше.
Bearish, если выше цены заявок больше.
Neutral, если равновесие.
import ccxt
import time
exchange = ccxt.binance()
symbol = 'BTC/USDT'
depth_limit = 50 # Кол-во уровней стакана
def get_orderbook_sentiment(symbol):
orderbook = exchange.fetch_order_book(symbol, limit=depth_limit)
bids = orderbook['bids']
asks = orderbook['asks']
bid_volume = sum([price * amount for price, amount in bids])
ask_volume = sum([price * amount for price, amount in asks])
imbalance = bid_volume - ask_volume
sentiment = "Neutral"
if imbalance > ask_volume * 0.1:
sentiment = "Bullish"
elif imbalance < -bid_volume * 0.1:
sentiment = "Bearish"
print(f"Sentiment: {sentiment}")
print(f"Bid Volume: {bid_volume:.2f}, Ask Volume: {ask_volume:.2f}, Imbalance: {imbalance:.2f}")
print("-" * 50)
while True:
try:
get_orderbook_sentiment(symbol)
time.sleep(5)
except Exception as e:
print("Error:", e)
time.sleep(5)
#инструмент
📌 Подпишись Crypto Python❗️
1👍4❤3
📌"Импульсная асимметрия" (Asymmetric Momentum Breakout)🧑💻
💡 Идея🧨
Большинство стратегий импульсов смотрят только на пробой в одном направлении
Здесь же мы ищем асимметричные всплески волатильности, когда:
- В одну сторону движение сильное,
- А в обратную — слабое и быстро затухает.
Это часто говорит о доминации покупателей или продавцов, и сигнал более надёжен, чем простой пробой.
📊 Логика🚀
1. Берём ATR (средний истинный диапазон) для оценки волатильности.
2. Отслеживаем импульсы:
Если свеча пробивает максимум последних N свечей и закрывается в верхней 20% своего диапазона — фиксируем бычий импульс.
Если пробивает минимум и закрывается в нижней 20% диапазона — медвежий импульс.
3. Проверяем асимметрию:
После импульса в обратную сторону не должно быть свечи с амплитудой > 0.5 от импульсной в течение M свечей.
4. Если условия соблюдены — даём сигнал на вход.
#торговые_стратегии
📌 Подпишись Crypto Python❗️
💡 Идея🧨
Большинство стратегий импульсов смотрят только на пробой в одном направлении
Здесь же мы ищем асимметричные всплески волатильности, когда:
- В одну сторону движение сильное,
- А в обратную — слабое и быстро затухает.
Это часто говорит о доминации покупателей или продавцов, и сигнал более надёжен, чем простой пробой.
📊 Логика🚀
1. Берём ATR (средний истинный диапазон) для оценки волатильности.
2. Отслеживаем импульсы:
Если свеча пробивает максимум последних N свечей и закрывается в верхней 20% своего диапазона — фиксируем бычий импульс.
Если пробивает минимум и закрывается в нижней 20% диапазона — медвежий импульс.
3. Проверяем асимметрию:
После импульса в обратную сторону не должно быть свечи с амплитудой > 0.5 от импульсной в течение M свечей.
4. Если условия соблюдены — даём сигнал на вход.
import ccxt
import pandas as pd
import time
exchange = ccxt.binance()
symbol = 'BTC/USDT'
timeframe = '5m'
lookback = 20
cooldown = 5
def fetch_ohlcv():
ohlcv = exchange.fetch_ohlcv(symbol, timeframe, limit=lookback+50)
df = pd.DataFrame(ohlcv, columns=['time', 'open', 'high', 'low', 'close', 'volume'])
df['time'] = pd.to_datetime(df['time'], unit='ms')
return df
def atr(df, period=14):
df['h-l'] = df['high'] - df['low']
df['h-c'] = abs(df['high'] - df['close'].shift())
df['l-c'] = abs(df['low'] - df['close'].shift())
tr = df[['h-l', 'h-c', 'l-c']].max(axis=1)
return tr.rolling(period).mean()
def detect_signals():
df = fetch_ohlcv()
df['ATR'] = atr(df)
last = df.iloc[-1]
prev_high = df['high'][-lookback-1:-1].max()
prev_low = df['low'][-lookback-1:-1].min()
# Проверка бычьего импульса
if last['high'] > prev_high and (last['close'] - last['low']) / (last['high'] - last['low']) > 0.8:
# Проверяем асимметрию
after_impulse = df.iloc[-cooldown:]
if all((after_impulse['high'] - after_impulse['low']) < 0.5 * (last['high'] - last['low'])):
print(f"🐂 Bullish breakout signal at {last['time']} price: {last['close']}")
# Проверка медвежьего импульса
if last['low'] < prev_low and (last['high'] - last['close']) / (last['high'] - last['low']) > 0.8:
after_impulse = df.iloc[-cooldown:]
if all((after_impulse['high'] - after_impulse['low']) < 0.5 * (last['high'] - last['low'])):
print(f"🐻 Bearish breakout signal at {last['time']} price: {last['close']}")
while True:
try:
detect_signals()
time.sleep(5)
except Exception as e:
print("Error:", e)
time.sleep(5)
#торговые_стратегии
📌 Подпишись Crypto Python❗️
🔥5👍3
📌"Индикатор ликвидности и скрытых уровней" (Hidden Liquidity Levels Scanner)🧑💻
💡 Суть инструмента 🚀
Большинство трейдеров смотрят на цену и индикаторы, но алготрейдеру критически важно знать, где в ордербуке стоят крупные лимитные заявки, потому что они часто:
- Разворачивают цену
- Замедляют импульсы
- Выступают как "магниты" для цены
📊 Наш инструмент будет:🛠️
1. Подключаться к Binance
2. Сканировать стакан ордеров (order book).
3. Выделять аномально крупные кластеры заявок.
4. Отображать их в консоли с пометкой:
🟢 крупная поддержка (buy wall)
🔴 крупное сопротивление (sell wall)
#инструмент
📌 Подпишись Crypto Python❗️
💡 Суть инструмента 🚀
Большинство трейдеров смотрят на цену и индикаторы, но алготрейдеру критически важно знать, где в ордербуке стоят крупные лимитные заявки, потому что они часто:
- Разворачивают цену
- Замедляют импульсы
- Выступают как "магниты" для цены
📊 Наш инструмент будет:🛠️
1. Подключаться к Binance
2. Сканировать стакан ордеров (order book).
3. Выделять аномально крупные кластеры заявок.
4. Отображать их в консоли с пометкой:
🟢 крупная поддержка (buy wall)
🔴 крупное сопротивление (sell wall)
import ccxt
import time
exchange = ccxt.binance()
symbol = 'BTC/USDT'
threshold = 5 # множитель среднего объема в стакане для выделения
def get_order_book():
order_book = exchange.fetch_order_book(symbol, limit=50)
bids = order_book['bids'] # [price, amount]
asks = order_book['asks']
bid_volumes = [b[1] for b in bids]
ask_volumes = [a[1] for a in asks]
avg_bid = sum(bid_volumes) / len(bid_volumes)
avg_ask = sum(ask_volumes) / len(ask_volumes)
large_bids = [(p, v) for p, v in bids if v > avg_bid * threshold]
large_asks = [(p, v) for p, v in asks if v > avg_ask * threshold]
print("\n=== Hidden Liquidity Levels ===")
if large_bids:
for price, vol in large_bids:
print(f"🟢 BUY WALL: {price:.2f} | {vol:.4f} BTC")
if large_asks:
for price, vol in large_asks:
print(f"🔴 SELL WALL: {price:.2f} | {vol:.4f} BTC")
if not large_bids and not large_asks:
print("Нет значимых уровней")
while True:
try:
get_order_book()
time.sleep(3)
except Exception as e:
print("Ошибка:", e)
time.sleep(5)
#инструмент
📌 Подпишись Crypto Python❗️
👍4❤1
📌"Импульс на истощении ликвидности" (Liquidity Exhaustion Breakout).🧑💻
💡 Суть стратегии:🚀
Вместо того чтобы просто ловить пробои или откаты, мы отслеживаем момент, когда:
1. Ликвидность (глубина ордербука) резко уменьшается в одну сторону.
2. Цена при этом начинает двигаться в направлении ослабевшей стороны.
3. Подтверждаем сигнал с помощью ускорения тикового потока сделок.
📊 Логика работы:🛠️
- Если из стакана исчезает крупная поддержка (buy wall) → цена пробьёт вниз.
- Если исчезает крупное сопротивление (sell wall) → цена пробьёт вверх.
- Входим в сторону исчезнувшей ликвидности, пока маркет-мейкеры не успели восстановить стенку.
#торговые_стратегии
📌 Подпишись Crypto Python❗️
💡 Суть стратегии:🚀
Вместо того чтобы просто ловить пробои или откаты, мы отслеживаем момент, когда:
1. Ликвидность (глубина ордербука) резко уменьшается в одну сторону.
2. Цена при этом начинает двигаться в направлении ослабевшей стороны.
3. Подтверждаем сигнал с помощью ускорения тикового потока сделок.
📊 Логика работы:🛠️
- Если из стакана исчезает крупная поддержка (buy wall) → цена пробьёт вниз.
- Если исчезает крупное сопротивление (sell wall) → цена пробьёт вверх.
- Входим в сторону исчезнувшей ликвидности, пока маркет-мейкеры не успели восстановить стенку.
import ccxt
import time
exchange = ccxt.binance()
symbol = 'BTC/USDT'
threshold_ratio = 0.4 # падение объема >60% считается исчезновением ликвидности
limit = 20 # глубина стакана
prev_bids = []
prev_asks = []
def detect_liquidity_exhaustion():
global prev_bids, prev_asks
ob = exchange.fetch_order_book(symbol, limit=limit)
bids = ob['bids']
asks = ob['asks']
top_bid_volume = sum([v for _, v in bids[:3]])
top_ask_volume = sum([v for _, v in asks[:3]])
signal = None
if prev_bids:
if top_bid_volume < sum(prev_bids) * threshold_ratio:
signal = "🔴 Возможен пробой вниз — исчезла поддержка!"
if prev_asks:
if top_ask_volume < sum(prev_asks) * threshold_ratio:
signal = "🟢 Возможен пробой вверх — исчезло сопротивление!"
prev_bids = [v for _, v in bids[:3]]
prev_asks = [v for _, v in asks[:3]]
if signal:
print(f"[{symbol}] {signal}")
else:
print(f"[{symbol}] Ситуация стабильна.")
while True:
try:
detect_liquidity_exhaustion()
time.sleep(2)
except Exception as e:
print("Ошибка:", e)
time.sleep(5)
#торговые_стратегии
📌 Подпишись Crypto Python❗️
👍5
📌"Market Heatmap Engine" — движок для построения в реальном времени тепловой карты крипторынка с учётом:
- силы тренда,
- притока/оттока ликвидности,
- скорости изменения цены.
💡 Главная идея — видеть рынок как "карту температур": красные сектора — перегретые активы с высокой вероятностью коррекции, зелёные — активы в фазе накопления, готовые к импульсу.
🔍 Логика работы:🛠️
1. Берём список монет с Binance (например, топ-50 по объёму).
2. Для каждой монеты:
- рассчитываем скорость изменения цены (momentum);
- измеряем изменение глубины стакана за последние секунды;
- оцениваем соотношение рыночных ордеров к лимитным.
3. На основе этих метрик формируем индекс перегрева от -100 до +100.
4. Отдаём данные в консоль или в браузер как тепловую карту.
#инструмент
📌 Подпишись Crypto Python❗️
- силы тренда,
- притока/оттока ликвидности,
- скорости изменения цены.
💡 Главная идея — видеть рынок как "карту температур": красные сектора — перегретые активы с высокой вероятностью коррекции, зелёные — активы в фазе накопления, готовые к импульсу.
🔍 Логика работы:🛠️
1. Берём список монет с Binance (например, топ-50 по объёму).
2. Для каждой монеты:
- рассчитываем скорость изменения цены (momentum);
- измеряем изменение глубины стакана за последние секунды;
- оцениваем соотношение рыночных ордеров к лимитным.
3. На основе этих метрик формируем индекс перегрева от -100 до +100.
4. Отдаём данные в консоль или в браузер как тепловую карту.
import ccxt
import time
import numpy as np
from prettytable import PrettyTable
exchange = ccxt.binance()
symbols = [m['symbol'] for m in exchange.fetch_markets() if '/USDT' in m['symbol']][:15]
prev_prices = {}
prev_bids = {}
prev_asks = {}
def get_heatmap():
table = PrettyTable(["Symbol", "Momentum", "Liquidity Δ", "Heat Index"])
for symbol in symbols:
try:
# Цена
ticker = exchange.fetch_ticker(symbol)
price = ticker['last']
momentum = 0
if symbol in prev_prices:
momentum = (price - prev_prices[symbol]) / prev_prices[symbol] * 100
# Ликвидность
orderbook = exchange.fetch_order_book(symbol, limit=10)
bids_vol = sum([v for _, v in orderbook['bids']])
asks_vol = sum([v for _, v in orderbook['asks']])
liquidity_change = 0
if symbol in prev_bids and symbol in prev_asks:
prev_liq = prev_bids[symbol] + prev_asks[symbol]
curr_liq = bids_vol + asks_vol
liquidity_change = (curr_liq - prev_liq) / prev_liq * 100 if prev_liq != 0 else 0
# Индекс перегрева
heat_index = momentum * 0.7 + liquidity_change * 0.3
table.add_row([
symbol,
f"{momentum:+.2f}%",
f"{liquidity_change:+.2f}%",
f"{heat_index:+.2f}"
])
# Сохраняем предыдущие значения
prev_prices[symbol] = price
prev_bids[symbol] = bids_vol
prev_asks[symbol] = asks_vol
except Exception as e:
pass
print("\033c", end="") # Очистка консоли
print(table)
while True:
get_heatmap()
time.sleep(3)
#инструмент
📌 Подпишись Crypto Python❗️
❤3👍2
📌"Радар крупных скрытых сделок (Stealth Trade Radar)".🧑💻
💡 Суть:🛠️
Большие игроки часто маскируют свои входы и выходы:
- разбивают ордера на мелкие,
- или используют быстрое выставление и снятие заявок.
Этот инструмент будет отслеживать поток сделок (trades) и искать аномальные паттерны, указывающие на скрытое накопление или сброс позиции.
📊 Логика:🧨
1. Получаем поток сделок с биржи через ccxt (fetch_trades).
2. Группируем их по направлению (покупка/продажа).
3. Считаем суммарный объём за последние N секунд.
4. Если за короткое время прошло аномально много мелких сделок в одну сторону — фиксируем сигнал.
#инструмент
📌 Подпишись Crypto Python❗️
💡 Суть:🛠️
Большие игроки часто маскируют свои входы и выходы:
- разбивают ордера на мелкие,
- или используют быстрое выставление и снятие заявок.
Этот инструмент будет отслеживать поток сделок (trades) и искать аномальные паттерны, указывающие на скрытое накопление или сброс позиции.
📊 Логика:🧨
1. Получаем поток сделок с биржи через ccxt (fetch_trades).
2. Группируем их по направлению (покупка/продажа).
3. Считаем суммарный объём за последние N секунд.
4. Если за короткое время прошло аномально много мелких сделок в одну сторону — фиксируем сигнал.
import ccxt
import time
from collections import deque
exchange = ccxt.binance()
symbol = 'BTC/USDT'
WINDOW_SEC = 5 # окно анализа в секундах
VOLUME_THRESHOLD = 50 # суммарный объем для сигнала
MAX_TRADE_SIZE = 0.1 # "мелкая" сделка
buy_trades = deque()
sell_trades = deque()
def check_stealth_trades():
global buy_trades, sell_trades
trades = exchange.fetch_trades(symbol)
now = time.time()
for t in trades:
ts = t['timestamp'] / 1000
size = t['amount']
side = t['side']
# Учитываем только "мелкие" сделки
if size <= MAX_TRADE_SIZE:
if side == 'buy':
buy_trades.append((ts, size))
else:
sell_trades.append((ts, size))
# Чистим старые сделки
while buy_trades and now - buy_trades[0][0] > WINDOW_SEC:
buy_trades.popleft()
while sell_trades and now - sell_trades[0][0] > WINDOW_SEC:
sell_trades.popleft()
buy_volume = sum(s for _, s in buy_trades)
sell_volume = sum(s for _, s in sell_trades)
if buy_volume > VOLUME_THRESHOLD:
print(f"🟢 Обнаружено скрытое накопление! Объем {buy_volume:.4f} {symbol}")
elif sell_volume > VOLUME_THRESHOLD:
print(f"🔴 Обнаружен скрытый сброс! Объем {sell_volume:.4f} {symbol}")
else:
print(f"[{symbol}] Активных скрытых сделок нет.")
while True:
try:
check_stealth_trades()
time.sleep(2)
except Exception as e:
print("Ошибка:", e)
time.sleep(5)
#инструмент
📌 Подпишись Crypto Python❗️
👍4❤1
📌"Сдвиг ликвидности + фейковый пробой" (Liquidity Shift & Trap Breakout).🧑💻
💡 Суть стратегии: 🚀
Большинство пробоев ложные — маркет-мейкеры специально создают видимость движения, чтобы заманить толпу.
Мы не просто избегаем ложных пробоев — мы торгуем против них, используя данные из ордербука и тиков.
📊 Логика работы:🛠️
1. Отслеживаем момент, когда цена пробивает уровень и в стакане резко появляется противоположная стена ликвидности (новые крупные ордера).
2. Проверяем, что после пробоя тик-флоу сделок идёт в противоположную сторону.
3. Входим в позицию против пробоя (ловим возврат цены в диапазон).
4. Выходим, когда цена возвращается в зону до пробоя.
#торговые_стратегии
📌 Подпишись Crypto Python❗️
💡 Суть стратегии: 🚀
Большинство пробоев ложные — маркет-мейкеры специально создают видимость движения, чтобы заманить толпу.
Мы не просто избегаем ложных пробоев — мы торгуем против них, используя данные из ордербука и тиков.
📊 Логика работы:🛠️
1. Отслеживаем момент, когда цена пробивает уровень и в стакане резко появляется противоположная стена ликвидности (новые крупные ордера).
2. Проверяем, что после пробоя тик-флоу сделок идёт в противоположную сторону.
3. Входим в позицию против пробоя (ловим возврат цены в диапазон).
4. Выходим, когда цена возвращается в зону до пробоя.
import ccxt
import time
exchange = ccxt.binance()
symbol = 'BTC/USDT'
limit = 20
prev_price = None
prev_bids = []
prev_asks = []
def detect_fake_breakout():
global prev_price, prev_bids, prev_asks
ob = exchange.fetch_order_book(symbol, limit=limit)
ticker = exchange.fetch_ticker(symbol)
price = ticker['last']
bids = ob['bids']
asks = ob['asks']
top_bid_volume = sum([v for _, v in bids[:3]])
top_ask_volume = sum([v for _, v in asks[:3]])
signal = None
if prev_price:
# Пробой вверх + внезапное появление крупной стены продаж
if price > prev_price * 1.002 and top_ask_volume > sum(prev_asks) * 1.5:
signal = "🔴 Фейковый пробой вверх! Возможен возврат вниз."
# Пробой вниз + внезапная крупная поддержка
elif price < prev_price * 0.998 and top_bid_volume > sum(prev_bids) * 1.5:
signal = "🟢 Фейковый пробой вниз! Возможен возврат вверх."
prev_price = price
prev_bids = [v for _, v in bids[:3]]
prev_asks = [v for _, v in asks[:3]]
if signal:
print(f"[{symbol}] {signal}")
else:
print(f"[{symbol}] Нет сигналов.")
while True:
try:
detect_fake_breakout()
time.sleep(2)
except Exception as e:
print("Ошибка:", e)
time.sleep(5)
#торговые_стратегии
📌 Подпишись Crypto Python❗️
🔥4❤1👍1
📌"Дивергенция импульса против ликвидности" (Impulse vs Liquidity Divergence).🧑💻
💡 Суть:🛠️
Идея в том, чтобы искать расхождение между направлением цены и изменением ликвидности в стакане.
Часто перед разворотом:
- цена продолжает расти,
- но ликвидность на стороне покупателей падает (и наоборот).
📊 Логика:🚀
1. Каждую секунду получаем:
- последние сделки,
- стакан ордеров (order book).
2. Считаем импульс (цена vs предыдущая цена).
3. Считаем изменение ликвидности на стороне покупателей и продавцов.
4. Если цена растёт, а ликвидность покупателей падает → сигнал на шорт.
Если цена падает, а ликвидность продавцов падает → сигнал на лонг.
#торговые_стратегии
📌 Подпишись Crypto Python❗️
💡 Суть:🛠️
Идея в том, чтобы искать расхождение между направлением цены и изменением ликвидности в стакане.
Часто перед разворотом:
- цена продолжает расти,
- но ликвидность на стороне покупателей падает (и наоборот).
📊 Логика:🚀
1. Каждую секунду получаем:
- последние сделки,
- стакан ордеров (order book).
2. Считаем импульс (цена vs предыдущая цена).
3. Считаем изменение ликвидности на стороне покупателей и продавцов.
4. Если цена растёт, а ликвидность покупателей падает → сигнал на шорт.
Если цена падает, а ликвидность продавцов падает → сигнал на лонг.
import ccxt
import time
exchange = ccxt.binance()
symbol = 'BTC/USDT'
depth_limit = 20
prev_price = None
prev_bids_liq = None
prev_asks_liq = None
def get_liquidity(orderbook_side):
return sum(amount for price, amount in orderbook_side)
while True:
try:
ticker = exchange.fetch_ticker(symbol)
orderbook = exchange.fetch_order_book(symbol, depth_limit)
last_price = ticker['last']
bids_liq = get_liquidity(orderbook['bids'])
asks_liq = get_liquidity(orderbook['asks'])
if prev_price is not None:
price_change = last_price - prev_price
bids_change = bids_liq - prev_bids_liq if prev_bids_liq is not None else 0
asks_change = asks_liq - prev_asks_liq if prev_asks_liq is not None else 0
if price_change > 0 and bids_change < 0:
print(f"🔴 {symbol}: Цена растёт, но покупатели уходят → возможный разворот вниз.")
elif price_change < 0 and asks_change < 0:
print(f"🟢 {symbol}: Цена падает, но продавцы уходят → возможный разворот вверх.")
else:
print(f"{symbol}: Нет дивергенций. Цена: {last_price}")
prev_price = last_price
prev_bids_liq = bids_liq
prev_asks_liq = asks_liq
time.sleep(2)
except Exception as e:
print("Ошибка:", e)
time.sleep(5)
#торговые_стратегии
📌 Подпишись Crypto Python❗️
🔥7👍3
📌"Детектор скрытой агрессии в ордербуке".🧑💻
💡 Суть инструмента:🚀
Большие игроки часто используют iceberg-ордера — они разбивают крупную заявку на маленькие куски, чтобы скрыть реальный объём.
Но по паттернам обновления стакана и частоте сделок можно вычислить, что там стоит крупный скрытый участник.
📊 Как работает:🧨
1. Получаем стакан и ленточку сделок в реальном времени.
2. Отслеживаем, что по определённой цене:
- объём не уменьшается заметно, хотя идут сделки;
- ордера на этой цене постоянно восстанавливаются.
3. Если это происходит многократно → сигнал о скрытом крупном игроке.
📌 Как использовать:💸
- Этот инструмент можно интегрировать в стратегию следования за крупным игроком.
- Можно отслеживать только уровни поддержки/сопротивления с айсбергами.
- В связке с импульсными стратегиями айсберги могут давать очень сильный сигнал.
#инструмент
📌 Подпишись Crypto Python❗️
💡 Суть инструмента:🚀
Большие игроки часто используют iceberg-ордера — они разбивают крупную заявку на маленькие куски, чтобы скрыть реальный объём.
Но по паттернам обновления стакана и частоте сделок можно вычислить, что там стоит крупный скрытый участник.
📊 Как работает:🧨
1. Получаем стакан и ленточку сделок в реальном времени.
2. Отслеживаем, что по определённой цене:
- объём не уменьшается заметно, хотя идут сделки;
- ордера на этой цене постоянно восстанавливаются.
3. Если это происходит многократно → сигнал о скрытом крупном игроке.
📌 Как использовать:💸
- Этот инструмент можно интегрировать в стратегию следования за крупным игроком.
- Можно отслеживать только уровни поддержки/сопротивления с айсбергами.
- В связке с импульсными стратегиями айсберги могут давать очень сильный сигнал.
import ccxt
import time
exchange = ccxt.binance()
symbol = 'BTC/USDT'
depth_limit = 20
iceberg_tracker = {}
iceberg_threshold = 5 # число "восстановлений" ордера для сигнала
while True:
try:
orderbook = exchange.fetch_order_book(symbol, depth_limit)
bids = orderbook['bids'][:5]
asks = orderbook['asks'][:5]
# Анализ обеих сторон
for side_name, side_data in [('BUY', bids), ('SELL', asks)]:
for price, amount in side_data:
key = (side_name, price)
# Если цена уже была в трекере
if key in iceberg_tracker:
prev_amount, restorations = iceberg_tracker[key]
if amount >= prev_amount * 0.95:
iceberg_tracker[key] = (amount, restorations + 1)
else:
iceberg_tracker[key] = (amount, restorations)
else:
iceberg_tracker[key] = (amount, 0)
# Сигнал, если много "восстановлений"
if iceberg_tracker[key][1] >= iceberg_threshold:
print(f"🧊 Iceberg {side_name} {symbol} @ {price}, объём {amount}")
iceberg_tracker[key] = (amount, 0)
time.sleep(1)
except Exception as e:
print("Ошибка:", e)
time.sleep(5)
#инструмент
📌 Подпишись Crypto Python❗️
👍5
📌"Импульсная ловушка на ликвидности" (Liquidity Sweep Reversal).🧑💻
📌 Идея стратегии:🧨
Большие игроки часто выносят стопы мелких трейдеров, чтобы собрать ликвидность, а потом разворачивают цену.
Мы можем ловить обратное движение после ложного пробоя ключевого уровня.
🔍 Логика:🛠️
1. Определяем локальные экстремумы (хай/лоу) последних N свечей.
2. Если цена резко пробивает экстремум и возвращается обратно в диапазон:
Это значит, что был сбор ликвидности (стопы) и вероятен разворот.
3. Подтверждение — свеча закрывается внутри диапазона.
4. Входим в противоположную сторону.
#торговые_стратегии
📌 Подпишись Crypto Python❗️
📌 Идея стратегии:🧨
Большие игроки часто выносят стопы мелких трейдеров, чтобы собрать ликвидность, а потом разворачивают цену.
Мы можем ловить обратное движение после ложного пробоя ключевого уровня.
🔍 Логика:🛠️
1. Определяем локальные экстремумы (хай/лоу) последних N свечей.
2. Если цена резко пробивает экстремум и возвращается обратно в диапазон:
Это значит, что был сбор ликвидности (стопы) и вероятен разворот.
3. Подтверждение — свеча закрывается внутри диапазона.
4. Входим в противоположную сторону.
import ccxt
import pandas as pd
import time
exchange = ccxt.binance()
symbol = 'BTC/USDT'
timeframe = '5m'
lookback = 20 # кол-во свечей для поиска хай/лоу
def get_ohlcv():
ohlcv = exchange.fetch_ohlcv(symbol, timeframe, limit=lookback + 3)
df = pd.DataFrame(ohlcv, columns=['time', 'open', 'high', 'low', 'close', 'volume'])
return df
while True:
try:
df = get_ohlcv()
recent_high = df['high'][:-1].max()
recent_low = df['low'][:-1].min()
last_candle = df.iloc[-1]
# Ложный пробой вверх
if last_candle['high'] > recent_high and last_candle['close'] < recent_high:
print(f"🔻 SHORT сигнал на {symbol} @ {last_candle['close']} (ложный пробой вверх)")
# Ложный пробой вниз
if last_candle['low'] < recent_low and last_candle['close'] > recent_low:
print(f"🔺 LONG сигнал на {symbol} @ {last_candle['close']} (ложный пробой вниз)")
time.sleep(5)
except Exception as e:
print("Ошибка:", e)
time.sleep(5)
#торговые_стратегии
📌 Подпишись Crypto Python❗️
👍8❤1
decs_simulator.py
11.8 KB
📌DECS: Dynamic Execution Cost & Slippage Simulator🧑💻
Что делает:🛠️
Для любой пары и любого объёма оценивает ожидаемые затраты исполнения (спред + проскальзывание) по текущему стакану и имитирует разные варианты разбиения (slicing) ордера: один маркет, несколько частей (VWAP-подход), лимитные отложки. В выводе — рекомендуемый способ разбивки (сколько частей), ожидаемая средняя цена исполнения и прогнозируемое проскальзывание в валюте и процентах. Логирует результаты в CSV.
Почему полезен:🚀
- Перед исполнением крупной заявки сразу видно, где скрытое проскальзывание и какие уровни «съедят» цену.
- Помогает выбрать оптимальный размер частей и стратегию исполнения (market vs slice vs limit).
- Уменьшает рыночное воздействие — критично для профессионалов и алготрейдов.
- Работает через REST (ccxt) — можно запускать в cron/долгоживущем процессе и интегрировать в бэктест/реальный бот.
#инструмент
📌 Подпишись Crypto Python❗️
Что делает:🛠️
Для любой пары и любого объёма оценивает ожидаемые затраты исполнения (спред + проскальзывание) по текущему стакану и имитирует разные варианты разбиения (slicing) ордера: один маркет, несколько частей (VWAP-подход), лимитные отложки. В выводе — рекомендуемый способ разбивки (сколько частей), ожидаемая средняя цена исполнения и прогнозируемое проскальзывание в валюте и процентах. Логирует результаты в CSV.
Почему полезен:🚀
- Перед исполнением крупной заявки сразу видно, где скрытое проскальзывание и какие уровни «съедят» цену.
- Помогает выбрать оптимальный размер частей и стратегию исполнения (market vs slice vs limit).
- Уменьшает рыночное воздействие — критично для профессионалов и алготрейдов.
- Работает через REST (ccxt) — можно запускать в cron/долгоживущем процессе и интегрировать в бэктест/реальный бот.
#инструмент
📌 Подпишись Crypto Python❗️
👍6
THS.py
9 KB
📌Tradeability Heat Score (THS) — сканер «здоровья» рынка🧑💻
Идея: для десятков USDT-пар на Binance рассчитать сводный балл торгуемости прямо сейчас и выдать топ-кандидатов.
Учитываем микроструктуру (спред, глубина стакана рядом с мидом), недавнюю волатильность, 24h-объём, концентрацию ликвидности.
Что даёт:💸
- Быстрый ответ на вопрос: что сейчас лучше всего торгуется (для скальпа/интрадей).
- Фильтр мусорных пар: широкие спреды, тонкий стакан, «рваная» волатильность.
- Алерты в консоль при резких изменениях «здоровья».
Как интерпретировать:❗
THS ближе к 1.0 — пара сейчас «здоровая»: узкий спред, плотный стакан возле mid, высокая концентрация ликвидности и адекватная внутридневная вола.
⚠️ Алерты — резкие изменения «здоровья» (±15% по умолчанию): повод пересмотреть приоритеты для входа/исполнения.
#инструмент
📌 Подпишись Crypto Python❗️
Идея: для десятков USDT-пар на Binance рассчитать сводный балл торгуемости прямо сейчас и выдать топ-кандидатов.
Учитываем микроструктуру (спред, глубина стакана рядом с мидом), недавнюю волатильность, 24h-объём, концентрацию ликвидности.
Что даёт:💸
- Быстрый ответ на вопрос: что сейчас лучше всего торгуется (для скальпа/интрадей).
- Фильтр мусорных пар: широкие спреды, тонкий стакан, «рваная» волатильность.
- Алерты в консоль при резких изменениях «здоровья».
Как интерпретировать:❗
THS ближе к 1.0 — пара сейчас «здоровая»: узкий спред, плотный стакан возле mid, высокая концентрация ликвидности и адекватная внутридневная вола.
⚠️ Алерты — резкие изменения «здоровья» (±15% по умолчанию): повод пересмотреть приоритеты для входа/исполнения.
#инструмент
📌 Подпишись Crypto Python❗️
👍9
📌"Импульсная волна с адаптивным стопом" — она сочетает логику поиска импульсных движений и динамическое сопровождение сделки на основе волатильности, что делает её живой и самоподстраивающейся.🧑💻
Логика стратегии:🧨
1. Фильтр тренда — используем EMA(50) и EMA(200) для определения направления.
EMA(50) выше EMA(200) → рассматриваем только покупки.
EMA(50) ниже EMA(200) → рассматриваем только продажи.
2. Детектор импульса — рост или падение цены за последние N свечей ≥ K%.
Например, рост на ≥ 1.5% за последние 5 свечей.
3. Вход:
Лонг: тренд вверх + импульс вверх.
Шорт: тренд вниз + импульс вниз.
4. Адаптивный стоп-лосс — стоп на основе ATR (среднего истинного диапазона), например 1.5 × ATR.
Стоп-лосс подтягивается за ценой, если она движется в прибыль.
5. Выход:
- При срабатывании стопа.
- Или при развороте тренда (EMA50 пересекла EMA200 обратно).
#торговые_стратегии
📌 Подпишись Crypto Python❗️
Логика стратегии:🧨
1. Фильтр тренда — используем EMA(50) и EMA(200) для определения направления.
EMA(50) выше EMA(200) → рассматриваем только покупки.
EMA(50) ниже EMA(200) → рассматриваем только продажи.
2. Детектор импульса — рост или падение цены за последние N свечей ≥ K%.
Например, рост на ≥ 1.5% за последние 5 свечей.
3. Вход:
Лонг: тренд вверх + импульс вверх.
Шорт: тренд вниз + импульс вниз.
4. Адаптивный стоп-лосс — стоп на основе ATR (среднего истинного диапазона), например 1.5 × ATR.
Стоп-лосс подтягивается за ценой, если она движется в прибыль.
5. Выход:
- При срабатывании стопа.
- Или при развороте тренда (EMA50 пересекла EMA200 обратно).
import ccxt
import pandas as pd
import time
# Настройки
symbol = "BTC/USDT"
timeframe = "5m"
impulse_threshold = 1.5 # %
ema_fast = 50
ema_slow = 200
atr_period = 14
exchange = ccxt.binance()
def fetch_data():
ohlcv = exchange.fetch_ohlcv(symbol, timeframe, limit=ema_slow + 50)
df = pd.DataFrame(ohlcv, columns=["time", "open", "high", "low", "close", "volume"])
df["time"] = pd.to_datetime(df["time"], unit="ms")
return df
def ema(series, period):
return series.ewm(span=period, adjust=False).mean()
def atr(df, period):
high_low = df["high"] - df["low"]
high_close = (df["high"] - df["close"].shift()).abs()
low_close = (df["low"] - df["close"].shift()).abs()
tr = pd.concat([high_low, high_close, low_close], axis=1).max(axis=1)
return tr.rolling(period).mean()
def check_signals():
df = fetch_data()
df["EMA_F"] = ema(df["close"], ema_fast)
df["EMA_S"] = ema(df["close"], ema_slow)
df["ATR"] = atr(df, atr_period)
# Детектор импульса
df["price_change"] = df["close"].pct_change(5) * 100
last = df.iloc[-1]
if last["EMA_F"] > last["EMA_S"] and last["price_change"] >= impulse_threshold:
sl = last["close"] - last["ATR"] * 1.5
print(f"[LONG] {symbol} Цена: {last['close']:.2f} | SL: {sl:.2f}")
elif last["EMA_F"] < last["EMA_S"] and last["price_change"] <= -impulse_threshold:
sl = last["close"] + last["ATR"] * 1.5
print(f"[SHORT] {symbol} Цена: {last['close']:.2f} | SL: {sl:.2f}")
else:
print("[NO SIGNAL]")
while True:
try:
check_signals()
time.sleep(10)
except Exception as e:
print("Ошибка:", e)
time.sleep(10)
#торговые_стратегии
📌 Подпишись Crypto Python❗️
🔥4👍2❤1
📌“Кластерный импульс + задержка входа”, которая ориентируется на высокую точность входа в импульсные движения, но с использованием контролируемой задержки для фильтрации ложных пробоев.🧑💻
Логика стратегии🚀
1. Поиск кластера узкого диапазона (NRB — Narrow Range Bars)
Находим участок из N свечей, где диапазон (High − Low) каждой свечи меньше среднего за период.
Это сигнал о накоплении.
2. Определение направления пробоя
Если цена пробивает верх кластера на объёме выше среднего → потенциал лонга.
Если пробивает вниз → потенциал шорта.
3. Задержка входа (Delay Entry)
После пробоя ждем M свечей и входим только если цена не вернулась обратно в диапазон.
Это отсеивает большинство ложных выходов.
4. Фильтрация тренда
Используем EMA(50) как фильтр:
Лонг — только если цена выше EMA(50)
Шорт — только если ниже EMA(50)
5. Выход:💸
Тейк профит: 1.5× риск (размер диапазона кластера)
Стоп: за противоположной границей диапазона кластера
#торговые_стратегии
📌 Подпишись Crypto Python❗️
Логика стратегии🚀
1. Поиск кластера узкого диапазона (NRB — Narrow Range Bars)
Находим участок из N свечей, где диапазон (High − Low) каждой свечи меньше среднего за период.
Это сигнал о накоплении.
2. Определение направления пробоя
Если цена пробивает верх кластера на объёме выше среднего → потенциал лонга.
Если пробивает вниз → потенциал шорта.
3. Задержка входа (Delay Entry)
После пробоя ждем M свечей и входим только если цена не вернулась обратно в диапазон.
Это отсеивает большинство ложных выходов.
4. Фильтрация тренда
Используем EMA(50) как фильтр:
Лонг — только если цена выше EMA(50)
Шорт — только если ниже EMA(50)
5. Выход:💸
Тейк профит: 1.5× риск (размер диапазона кластера)
Стоп: за противоположной границей диапазона кластера
import ccxt
import pandas as pd
import time
symbol = 'BTC/USDT'
timeframe = '15m'
cluster_size = 5
delay_bars = 2
exchange = ccxt.binance()
def fetch_ohlcv():
data = exchange.fetch_ohlcv(symbol, timeframe, limit=200)
df = pd.DataFrame(data, columns=['time', 'open', 'high', 'low', 'close', 'volume'])
df['time'] = pd.to_datetime(df['time'], unit='ms')
return df
def strategy_signals(df):
signals = []
df['ema50'] = df['close'].ewm(span=50).mean()
for i in range(cluster_size, len(df) - delay_bars):
cluster = df.iloc[i-cluster_size:i]
avg_range = (cluster['high'] - cluster['low']).mean()
if all((cluster['high'] - cluster['low']) < avg_range * 1.05):
high_cluster = cluster['high'].max()
low_cluster = cluster['low'].min()
breakout_up = df.iloc[i]['close'] > high_cluster
breakout_down = df.iloc[i]['close'] < low_cluster
if breakout_up and df.iloc[i]['close'] > df.iloc[i]['ema50']:
# Ждем delay_bars
if all(df.iloc[i+1:i+delay_bars+1]['close'] > high_cluster):
signals.append((df.iloc[i+delay_bars]['time'], 'LONG', high_cluster, low_cluster))
elif breakout_down and df.iloc[i]['close'] < df.iloc[i]['ema50']:
if all(df.iloc[i+1:i+delay_bars+1]['close'] < low_cluster):
signals.append((df.iloc[i+delay_bars]['time'], 'SHORT', high_cluster, low_cluster))
return signals
if __name__ == "__main__":
while True:
df = fetch_ohlcv()
sigs = strategy_signals(df)
for s in sigs:
print(f"{s[0]} | SIGNAL: {s[1]} | Cluster High: {s[2]:.2f} | Cluster Low: {s[3]:.2f}")
time.sleep(60)
#торговые_стратегии
📌 Подпишись Crypto Python❗️
👍3❤2
ptrfs.py
9.3 KB
📌Pre-Trade Risk & Filters Sizer (PTRFS)🧑💻
Что делает: до отправки ордера рассчитывает корректный объём позиции из риска (в USDT или % депозита), учитывая биржевые фильтры Binance (минимальный нотионал, шаг цены/лот, точности), стоп-лосс, тейк-профит и комиссии. Выводит готовые параметры сделки (округлённые под правила рынка) и предупреждения, если что-то не проходит.
Полезно для: ручной торговли, полу-авто ботов, автогенерации параметров ордера (без его размещения).
#инструмент
📌 Подпишись Crypto Python❗️
Что делает: до отправки ордера рассчитывает корректный объём позиции из риска (в USDT или % депозита), учитывая биржевые фильтры Binance (минимальный нотионал, шаг цены/лот, точности), стоп-лосс, тейк-профит и комиссии. Выводит готовые параметры сделки (округлённые под правила рынка) и предупреждения, если что-то не проходит.
Полезно для: ручной торговли, полу-авто ботов, автогенерации параметров ордера (без его размещения).
#инструмент
📌 Подпишись Crypto Python❗️
🔥5
📌"Двойной фильтр импульса", которая сочетает определение момента входа по резкому изменению объема и фильтрацию по силе тренда, чтобы избегать ложных движений.🧑💻
📌 Логика стратегии:🚀
1. Определяем импульс по объему — если текущий объем выше среднего за N свечей на заданный коэффициент (например, 2×).
2. Фильтруем тренд по ADX — торгуем только, если тренд действительно сильный (ADX > 25).
3. Вход в сделку:
Лонг: Цена выше EMA(50), импульс на покупку.
Шорт: Цена ниже EMA(50), импульс на продажу.
4. Выход из сделки — по достижению заданного соотношения риск/прибыль или при обратном сигнале импульса.
#торговые_стратегии
📌 Подпишись Crypto Python❗️
📌 Логика стратегии:🚀
1. Определяем импульс по объему — если текущий объем выше среднего за N свечей на заданный коэффициент (например, 2×).
2. Фильтруем тренд по ADX — торгуем только, если тренд действительно сильный (ADX > 25).
3. Вход в сделку:
Лонг: Цена выше EMA(50), импульс на покупку.
Шорт: Цена ниже EMA(50), импульс на продажу.
4. Выход из сделки — по достижению заданного соотношения риск/прибыль или при обратном сигнале импульса.
import ccxt
import pandas as pd
import time
# Параметры
symbol = "BTC/USDT"
timeframe = "5m"
lookback = 100
volume_factor = 2
adx_period = 14
ema_period = 50
# Binance
exchange = ccxt.binance({'enableRateLimit': True})
def fetch_data():
ohlcv = exchange.fetch_ohlcv(symbol, timeframe, limit=lookback)
df = pd.DataFrame(ohlcv, columns=["time","open","high","low","close","volume"])
df["time"] = pd.to_datetime(df["time"], unit="ms")
return df
def calculate_indicators(df):
df["EMA"] = df["close"].ewm(span=ema_period).mean()
df["VolumeAvg"] = df["volume"].rolling(window=adx_period).mean()
# ADX
high = df["high"]
low = df["low"]
close = df["close"]
plus_dm = high.diff()
minus_dm = low.diff().abs()
plus_dm = plus_dm.where((plus_dm > minus_dm) & (plus_dm > 0), 0.0)
minus_dm = minus_dm.where((minus_dm > plus_dm) & (minus_dm > 0), 0.0)
tr1 = high - low
tr2 = (high - close.shift()).abs()
tr3 = (low - close.shift()).abs()
tr = pd.concat([tr1, tr2, tr3], axis=1).max(axis=1)
atr = tr.rolling(window=adx_period).mean()
plus_di = 100 * (plus_dm.rolling(window=adx_period).mean() / atr)
minus_di = 100 * (minus_dm.rolling(window=adx_period).mean() / atr)
dx = (abs(plus_di - minus_di) / (plus_di + minus_di)) * 100
df["ADX"] = dx.rolling(window=adx_period).mean()
return df
def check_signals(df):
latest = df.iloc[-1]
prev = df.iloc[-2]
if latest["volume"] > latest["VolumeAvg"] * volume_factor and latest["ADX"] > 25:
if latest["close"] > latest["EMA"]:
print(f"[{latest['time']}] ЛОНГ сигнал — сильный импульс вверх, цена {latest['close']}")
elif latest["close"] < latest["EMA"]:
print(f"[{latest['time']}] ШОРТ сигнал — сильный импульс вниз, цена {latest['close']}")
while True:
try:
df = fetch_data()
df = calculate_indicators(df)
check_signals(df)
time.sleep(10)
except Exception as e:
print("Ошибка:", e)
time.sleep(5)
#торговые_стратегии
📌 Подпишись Crypto Python❗️
👍7
📌"Мульти-таймфреймовый тепловой индикатор тренда"🧑💻
📌 Суть инструмента:🧨
Он в реальном времени показывает в консоли, насколько согласованы тренды на разных таймфреймах (например, 1m, 5m, 15m, 1h) для выбранной пары.
Это полезно, потому что многие стратегии эффективны, когда тренды совпадают на нескольких интервалах — вероятность успеха сделки выше.
#инструмент
📌 Подпишись Crypto Python❗️
📌 Суть инструмента:🧨
Он в реальном времени показывает в консоли, насколько согласованы тренды на разных таймфреймах (например, 1m, 5m, 15m, 1h) для выбранной пары.
Это полезно, потому что многие стратегии эффективны, когда тренды совпадают на нескольких интервалах — вероятность успеха сделки выше.
import ccxt
import pandas as pd
import time
exchange = ccxt.binance({'enableRateLimit': True})
symbol = "BTC/USDT"
timeframes = ["1m", "5m", "15m", "1h"]
ema_period = 50
def get_trend(df):
df["EMA"] = df["close"].ewm(span=ema_period).mean()
if df["close"].iloc[-1] > df["EMA"].iloc[-1]:
return "UP"
elif df["close"].iloc[-1] < df["EMA"].iloc[-1]:
return "DOWN"
return "FLAT"
def fetch_data(symbol, timeframe):
ohlcv = exchange.fetch_ohlcv(symbol, timeframe, limit=ema_period + 5)
df = pd.DataFrame(ohlcv, columns=["time","open","high","low","close","volume"])
return df
while True:
try:
trends = {}
for tf in timeframes:
df = fetch_data(symbol, tf)
trends[tf] = get_trend(df)
up_count = list(trends.values()).count("UP")
down_count = list(trends.values()).count("DOWN")
print(f"\n=== {symbol} ===")
for tf, tr in trends.items():
print(f"{tf}: {tr}")
if up_count == len(timeframes):
print("🔥 ВСЕ ТАЙМФРЕЙМЫ ВВЕРХ — сильный бычий тренд")
elif down_count == len(timeframes):
print("❄ ВСЕ ТАЙМФРЕЙМЫ ВНИЗ — сильный медвежий тренд")
else:
print("⚠ Смешанный тренд — возможная неопределенность")
time.sleep(10)
except Exception as e:
print("Ошибка:", e)
time.sleep(5)
#инструмент
📌 Подпишись Crypto Python❗️
🔥5
📌"Стратегия сжимающегося диапазона (Volatility Squeeze Breakout)".🧑💻
📌 Идея стратегии:🚀
Цена часто консолидируется в узком диапазоне (сжимается волатильность), а затем следует мощный импульс в одну из сторон.
Мы используем индикаторы для выявления таких моментов и торгуем на пробой с подтверждением.
⚙️ Логика:🛠️
1. Считаем Bollinger Bands и Keltner Channels:
Когда полосы Боллинджера сжимаются внутрь каналов Кельтнера → рынок в сжатии.
2. Ждём выхода из диапазона:
Цена закрывается выше верхней границы Боллинджера → сигнал на покупку.
Цена закрывается ниже нижней границы Боллинджера → сигнал на продажу.
3. Дополнительно проверяем объём: пробой должен сопровождаться повышенным объёмом.
4. Сигналы выводим в консоль.
#торговые_стратегии
📌 Подпишись Crypto Python❗️
📌 Идея стратегии:🚀
Цена часто консолидируется в узком диапазоне (сжимается волатильность), а затем следует мощный импульс в одну из сторон.
Мы используем индикаторы для выявления таких моментов и торгуем на пробой с подтверждением.
⚙️ Логика:🛠️
1. Считаем Bollinger Bands и Keltner Channels:
Когда полосы Боллинджера сжимаются внутрь каналов Кельтнера → рынок в сжатии.
2. Ждём выхода из диапазона:
Цена закрывается выше верхней границы Боллинджера → сигнал на покупку.
Цена закрывается ниже нижней границы Боллинджера → сигнал на продажу.
3. Дополнительно проверяем объём: пробой должен сопровождаться повышенным объёмом.
4. Сигналы выводим в консоль.
import ccxt
import pandas as pd
import numpy as np
import time
exchange = ccxt.binance({'enableRateLimit': True})
symbol = "BTC/USDT"
timeframe = "15m"
limit = 150
def fetch_data():
ohlcv = exchange.fetch_ohlcv(symbol, timeframe, limit=limit)
df = pd.DataFrame(ohlcv, columns=["time","open","high","low","close","volume"])
return df
def bollinger_keltner_strategy(df):
df["MA20"] = df["close"].rolling(20).mean()
df["STD20"] = df["close"].rolling(20).std()
df["UpperBB"] = df["MA20"] + 2 * df["STD20"]
df["LowerBB"] = df["MA20"] - 2 * df["STD20"]
df["ATR"] = (df["high"] - df["low"]).rolling(20).mean()
df["UpperKC"] = df["MA20"] + 1.5 * df["ATR"]
df["LowerKC"] = df["MA20"] - 1.5 * df["ATR"]
df["squeeze_on"] = (df["UpperBB"] < df["UpperKC"]) & (df["LowerBB"] > df["LowerKC"])
df["squeeze_off"] = (df["UpperBB"] > df["UpperKC"]) & (df["LowerBB"] < df["LowerKC"])
return df
while True:
try:
df = fetch_data()
df = bollinger_keltner_strategy(df)
last = df.iloc[-1]
print(f"\n=== {symbol} {timeframe} ===")
if last["squeeze_on"]:
print("🔵 Рынок в сжатии (ожидается пробой)")
elif last["squeeze_off"]:
if last["close"] > last["UpperBB"] and last["volume"] > df["volume"].rolling(20).mean().iloc[-1]:
print("🟢 Сигнал BUY — пробой вверх с объёмом")
elif last["close"] < last["LowerBB"] and last["volume"] > df["volume"].rolling(20).mean().iloc[-1]:
print("🔴 Сигнал SELL — пробой вниз с объёмом")
else:
print("⚪ Нет подтверждения пробоя")
else:
print("⏸ Рынок без особых сигналов")
time.sleep(20)
except Exception as e:
print("Ошибка:", e)
time.sleep(5)
#торговые_стратегии
📌 Подпишись Crypto Python❗️
👍8