Crypto Python
807 subscribers
448 photos
26 files
455 links
Алготрейдинг 🤖 , работа с API бирж и агрегаторов 🌐 , автоматизации в крипто сфере📈 🚀
Ваши предложения📝 @binance_de
Download Telegram
📌"Trade Memory Tracker" - (Трекер повторяющихся ошибок и паттернов трейдера) 🧑‍💻

🔑 Идея: 🧨

Многие трейдеры совершают одни и те же ошибки:

ранний выход,

перезаход,

вход без сигнала,

завышенный риск.

👉 Инструмент автоматически ведёт журнал сделок и выявляет повторяющиеся ошибки/паттерны трейдера, которые стоят ему денег.

📌 Логика работы: 🛠️

1. После каждой сделки трейдер сохраняет результат (P/L, направление, причина входа).

2. Инструмент анализирует историю:

средний результат по типу сигнала,

где чаще всего фиксируется убыток,

какие часы/дни дают лучший результат.

3. Генерируется отчёт: «95% убыточных сделок совершаются в азиатскую сессию», или «перезаход после стопа всегда минусовой».

import pandas as pd

# История сделок трейдера
data = [
{"time": "2025-09-01 12:00", "signal": "breakout", "result": -50},
{"time": "2025-09-01 15:00", "signal": "retest", "result": +120},
{"time": "2025-09-02 10:00", "signal": "impulse", "result": -30},
{"time": "2025-09-02 18:00", "signal": "breakout", "result": -40},
{"time": "2025-09-03 14:00", "signal": "retest", "result": +90},
]

df = pd.DataFrame(data)
df['time'] = pd.to_datetime(df['time'])
df['day'] = df['time'].dt.day_name()
df['hour'] = df['time'].dt.hour

# Анализ по сигналам
signal_stats = df.groupby('signal')['result'].agg(['count','mean','sum'])

# Анализ по времени суток
hour_stats = df.groupby('hour')['result'].mean()

# Общий вывод
print("📊 Ошибки и паттерны трейдера:\n")
print("По сигналам:\n", signal_stats)
print("\nПо часам:\n", hour_stats)

#инструмент

📌 Подпишись  Crypto Python❗️
👍41🔥1
📌"Market Replay Console" - (реплей рынка прямо в терминале) 🧑‍💻

📌 Идея: 🧨

Большинство трейдеров анализируют рынок по истории свечей или графикам, но редко «проживают» движение в реальном времени.

Инструмент позволяет прокручивать историю торгов как будто это реальный рынок ― свеча за свечой, тик за тиком, с паузами и задержками.

Это даёт:💸

- тренировку реакции на движения без риска;

- тестирование стратегий «на ощущениях»;

- поиск паттернов в динамике, а не только на статичном графике.

🔑 Особенности: 🛠️

- Работает в консоли (без графики, всё текстом).

- Подгружает историю цен с Binance через ccxt.

- Симулирует «живой рынок» с задержкой между свечами.

- Можно поставить паузу или ускорить «прокрутку».

import ccxt
import time

# Настройка
exchange = ccxt.binance({'enableRateLimit': True})
symbol = "BTC/USDT"
timeframe = "1m"
limit = 100 # кол-во свечей в реплее
delay = 0.5 # секунда между свечами (можно менять для ускорения)

# Загружаем историю
ohlcv = exchange.fetch_ohlcv(symbol, timeframe, limit=limit)

print(f" Реплей {symbol}, таймфрейм {timeframe}, свечей: {limit}\n")

for candle in ohlcv:
ts, open_, high, low, close, vol = candle
print(f"🕒 Цена {close:.2f} | O:{open_:.2f} H:{high:.2f} L:{low:.2f} V:{vol:.2f}")
time.sleep(delay)

#инструмент

📌 Подпишись  Crypto Python❗️
👍42
📌"Pattern Replay Trainer" - (тренажёр распознавания рыночных паттернов в консоли)🧑‍💻

📌 Идея: 🧨

Вместо статичных графиков трейдер получает рандомные фрагменты истории цены (например, по 30 свечей).
Он не знает, что будет дальше, и должен принять решение: лонг / шорт / пропуск.
После выбора программа «открывает» будущее (следующие свечи) и показывает, был ли трейдер прав.

Это позволяет:

- тренировать интуицию и скорость реакции;

- оттачивать свои правила входа/выхода;

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

import ccxt
import pandas as pd
import random
import time

exchange = ccxt.binance({'enableRateLimit': True})
symbol = "BTC/USDT"
timeframe = "1m"
limit = 500

# Загружаем историю
ohlcv = exchange.fetch_ohlcv(symbol, timeframe, limit=limit)
df = pd.DataFrame(ohlcv, columns=["ts","open","high","low","close","volume"])
df["ts"] = pd.to_datetime(df["ts"], unit="ms")

def replay_trainer(window=30, future=10):
start = random.randint(0, len(df) - window - future - 1)
sample = df.iloc[start:start+window]
future_data = df.iloc[start+window:start+window+future]

print("\n🕒 Новый фрагмент истории!")
for _, row in sample.iterrows():
print(f"{row['ts']} | O:{row['open']:.2f} C:{row['close']:.2f}")

choice = input("\nТвой выбор (long/short/skip): ").strip().lower()

print("\n📊 Будущее:")
for _, row in future_data.iterrows():
print(f"{row['ts']} | O:{row['open']:.2f} C:{row['close']:.2f}")
time.sleep(0.2)

first = sample["close"].iloc[-1]
last = future_data["close"].iloc[-1]
change = (last - first) / first * 100

if choice == "long":
print(f"\n Результат LONG: {change:.2f}%")
elif choice == "short":
print(f"\n Результат SHORT: {-change:.2f}%")
else:
print(f"\n Пропуск | рынок изменился на {change:.2f}%")

if __name__ == "__main__":
while True:
replay_trainer()
if input("\nПродолжить? (y/n): ").strip().lower() != "y":
break

#инструмент

📌 Подпишись  Crypto Python❗️
5👍1👏1
📌"Trade Journal AutoLogger" - (автоматический торговый дневник для сделок с Binance через ccxt) 🧑‍💻

📌 Идея: 🧨

У большинства трейдеров нет дисциплины вести дневник сделок вручную.

Этот инструмент делает всё сам:

- собирает сделки с Binance (история + новые ордера),

- сохраняет их в CSV,

- считает прибыль/убыток, комиссии, % доходности,

- формирует «дневник» трейдера.

import ccxt
import pandas as pd
from datetime import datetime
import time

# ⚠️ Укажи свои API ключи Binance
api_key = "YOUR_API_KEY"
api_secret = "YOUR_API_SECRET"

exchange = ccxt.binance({
"apiKey": api_key,
"secret": api_secret,
"enableRateLimit": True
})

def fetch_trades(symbol="BTC/USDT", since=None, limit=50):
try:
trades = exchange.fetch_my_trades(symbol, since=since, limit=limit)
return trades
except Exception as e:
print("Ошибка:", e)
return []

def log_trades_to_csv(symbol="BTC/USDT", filename="trade_journal.csv"):
trades = fetch_trades(symbol)
if not trades:
print("Нет новых сделок")
return

df = pd.DataFrame(trades)
df["datetime"] = pd.to_datetime(df["timestamp"], unit="ms")
df = df[["datetime", "symbol", "side", "price", "amount", "cost", "fee"]]

try:
old = pd.read_csv(filename)
df = pd.concat([old, df]).drop_duplicates()
except FileNotFoundError:
pass

df.to_csv(filename, index=False)
print(f"💾 Журнал обновлён: {len(df)} сделок сохранено")

if __name__ == "__main__":
print(" Авто-журнал сделок запущен (Ctrl+C для выхода)")
while True:
log_trades_to_csv("BTC/USDT")
time.sleep(60) # обновляем каждую минуту

#инструмент

📌 Подпишись  Crypto Python❗️
👍6
📌«Market Rhythm Analyzer» - (анализатор ритма рынка в реальном времени) 🧑‍💻

📌 Идея: 🧨

Рынок двигается импульсами: серия быстрых свечей → пауза → новый рывок.

Этот «ритм» можно измерить и использовать:

- для фильтрации сделок (не входить, если рынок «устал»),

- для поиска фаз накопления/импульса,

- для оценки волатильности без индикаторов.

🔑 Как работает: 🛠️

1. Считывает поток цен с Binance.

2. Измеряет средний интервал между движениями цены (например, каждые 0.1% изменения).

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

4. Если ритм ускоряется → значит рынок в фазе импульса.

5. Если ритм замедляется → значит рынок в накоплении/передышке.

import ccxt
import time
from collections import deque

symbol = "BTC/USDT"
price_step = 0.001 # 0.1% шаг для фиксации изменения
window = 10 # усреднение по N шагам
exchange = ccxt.binance()

last_price = None
last_event_time = None
intervals = deque(maxlen=window)

while True:
try:
ticker = exchange.fetch_ticker(symbol)
price = ticker['last']

if last_price is None:
last_price = price
last_event_time = time.time()
continue

# проверяем шаг
if abs(price - last_price) / last_price >= price_step:
now = time.time()
interval = now - last_event_time
intervals.append(interval)
last_event_time = now
last_price = price

if len(intervals) == window:
avg_interval = sum(intervals) / len(intervals)
print(f"📊 {symbol} | Средний ритм: {avg_interval:.2f} сек/шаг")

if avg_interval < 5:
print(" Рынок в импульсе!")
elif avg_interval > 15:
print("😴 Рынок в накоплении...")
else:
print("📈 Нормальный ритм.")
time.sleep(1)

except Exception as e:
print("Ошибка:", e)
time.sleep(5)

#инструмент

📌 Подпишись  Crypto Python❗️
👍41
📌«Spread Pulse Monitor» - (мониторинг пульса спреда в реальном времени) 🧑‍💻

📌 Идея: 🧨

Спред (разница между bid и ask) — живой индикатор ликвидности и настроения рынка.
Чем спред:

уже → выше ликвидность, часто перед сильным движением,

шире → паника/низкая ликвидность, высокий риск.

Инструмент отслеживает «дыхание» спреда и выводит сигналы.

🔑 Функции: 🛠️

1. Подключается к Binance (через ccxt).

2. Каждую секунду берёт order_book по выбранной паре.

3. Считает:

текущий спред в %

средний спред за последние N минут

«пульс» (расширяется или сужается).

4. Печатает сигналы:

«Спред резко сжался — возможен импульс!»

🚨 «Спред расширился — осторожно, низкая ликвидность».

import ccxt
import time
from collections import deque

symbol = "BTC/USDT"
exchange = ccxt.binance()
window = 20 # усреднение по N точкам
spread_history = deque(maxlen=window)

def get_spread():
order_book = exchange.fetch_order_book(symbol, limit=5)
bid = order_book['bids'][0][0]
ask = order_book['asks'][0][0]
spread = (ask - bid) / bid
return spread, bid, ask

while True:
try:
spread, bid, ask = get_spread()
spread_history.append(spread)
avg_spread = sum(spread_history) / len(spread_history)

print(f"{symbol} | Bid: {bid:.2f} Ask: {ask:.2f} | Спред: {spread*100:.3f}% (средн: {avg_spread*100:.3f}%)")

if spread < avg_spread * 0.5:
print(" Спред резко сжался — возможен импульс!")
elif spread > avg_spread * 2:
print("🚨 Спред расширился — осторожно, низкая ликвидность!")

time.sleep(1)
except Exception as e:
print("Ошибка:", e)
time.sleep(5)

#инструмент

📌 Подпишись  Crypto Python❗️
👍52
📌"Order Book Velocity" - (скорость изменения стакана) 🧑‍💻

📌 Суть: 🧨

Большинство смотрит на сам стакан (где стоят лимитки).
Но гораздо важнее — как быстро меняется глубина и структура заявок.

🔑 Как работает: 🛠️

1. Подключается к Binance через WebSocket и берёт стакан в реальном времени.

2. Каждую секунду считает:

насколько вырос/уменьшился суммарный объём на стороне BID (покупатели),

насколько изменился объём на стороне ASK (продавцы).

3. Строит метрику

Если отрицательная → продавцы давят сильнее.

import asyncio
import json
import websockets
from collections import defaultdict

# Пара для анализа
SYMBOL = "btcusdt"
DEPTH_LEVEL = 10 # глубина стакана для анализа
INTERVAL = 1 # интервал в секундах для подсчёта velocity

# Храним прошлые значения объёмов
previous = {"bids": 0, "asks": 0}

async def orderbook_velocity():
url = f"wss://stream.binance.com:9443/ws/{SYMBOL}@depth@100ms"
async with websockets.connect(url) as ws:
print(f" Connected to Binance Order Book for {SYMBOL.upper()}")
buffer_bids = defaultdict(float)
buffer_asks = defaultdict(float)

while True:
msg = await ws.recv()
data = json.loads(msg)

# Берем только DEPTH_LEVEL уровней
bids = data.get("b", [])[:DEPTH_LEVEL]
asks = data.get("a", [])[:DEPTH_LEVEL]

# Сумма объёмов
total_bids = sum(float(b[1]) for b in bids)
total_asks = sum(float(a[1]) for a in asks)

# Разница с предыдущим состоянием
delta_bids = total_bids - previous["bids"]
delta_asks = total_asks - previous["asks"]

velocity = delta_bids - delta_asks

print(f"📊 Velocity: {velocity:.4f} | ΔBids: {delta_bids:.2f} | ΔAsks: {delta_asks:.2f}")

# Обновляем
previous["bids"] = total_bids
previous["asks"] = total_asks

await asyncio.sleep(INTERVAL)

if __name__ == "__main__":
try:
asyncio.run(orderbook_velocity())
except KeyboardInterrupt:
print(" Stopped by user")

#инструмент

📌 Подпишись  Crypto Python❗️
👍7
📌"Liquidity Magnet"- (магнит ликвидности — определяет, где “” цена) 🧑‍💻

💡 Идея: 🧨

Цена всегда тянется туда, где сконцентрированы незакрытые ордера и уровни ликвидности.
Инструмент в реальном времени отслеживает ценовые кластеры, где:

происходят частые касания свечей,

но цена не может уйти далеко.

Такие зоны — это “магниты” — туда рынок тянет ликвидность и часто пробивает их импульсом.

🧠 Принцип: 🛠️

1. Для каждой пары получаем последние N свечей (например, 200 × 1m).

2. Разбиваем диапазон цен на сетку (например, шаг 0.1%).

3. Подсчитываем, сколько свечей “касались” каждого уровня.

4. Если уровень набирает аномально много касаний → отмечаем как магнит.

import ccxt
import numpy as np

exchange = ccxt.binance()
symbol = 'BTC/USDT'
candles = exchange.fetch_ohlcv(symbol, timeframe='1m', limit=200)

prices = [c[4] for c in candles]
highs = [c[2] for c in candles]
lows = [c[3] for c in candles]

min_price, max_price = min(lows), max(highs)
bins = np.linspace(min_price, max_price, 100)

touches = np.zeros(len(bins))
for h, l in zip(highs, lows):
for i, level in enumerate(bins):
if l <= level <= h:
touches[i] += 1

threshold = np.percentile(touches, 95)
magnets = [(bins[i], int(t)) for i, t in enumerate(touches) if t >= threshold]

print("🧲 Liquidity Magnets Detected:")
for level, count in magnets:
print(f"→ Level: {level:.2f} | touches: {count}")

#инструмент

📌 Подпишись  Crypto Python❗️
👍71
📌Market Memory Map” - (анализатор рыночной памяти — где цена «помнит» уровни ликвидности) 🧑‍💻

💡 Идея: 🧨

Рынок часто возвращается к ценам, где происходили сильные обороты — это и есть “память рынка”.
Инструмент создаёт тепловую карту “памяти” — показывает, на каких ценовых уровнях цена останавливалась, ускорялась или меняла волатильность.

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

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

1. Загружает исторические свечи (klines) за заданный период.

2. Для каждого уровня цены (например, шаг 0.2%) считает:

сколько раз цена в него “заходила”,

сколько раз от него резко отскакивала.

3. Строит тепловую матрицу уровней по количеству реакций.

4. Показывает ключевые “зоны памяти” — где рынок чаще всего реагировал.


🔍 Интерпретация: 💸

🔥 Высокие пики → цена часто меняла направление → “зоны памяти” рынка.

⚙️ Плоские зоны → нейтральные участки без реакции.

import ccxt
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

symbol = "BTC/USDT"
tf = "1h"
limit = 1000
exchange = ccxt.binance()

# Загружаем свечи
data = exchange.fetch_ohlcv(symbol, tf, limit=limit)
df = pd.DataFrame(data, columns=["time", "open", "high", "low", "close", "volume"])
df["time"] = pd.to_datetime(df["time"], unit="ms")

# Готовим сетку уровней
min_price, max_price = df["low"].min(), df["high"].max()
bins = np.linspace(min_price, max_price, 200)
reactions = np.zeros(len(bins))

# Считаем реакции на каждом уровне
for _, row in df.iterrows():
for i, lvl in enumerate(bins):
# если цена прошла уровень и изменила направление — "реакция"
if row["low"] <= lvl <= row["high"]:
if (row["close"] - row["open"]) * (lvl - row["open"]) < 0:
reactions[i] += 1

# Нормализация
reactions = reactions / reactions.max()

# Визуализация
plt.figure(figsize=(10, 6))
plt.bar(bins, reactions, width=(bins[1]-bins[0]), color="cyan", edgecolor="black")
plt.title(f"Market Memory Map — {symbol} ({tf})")
plt.xlabel("Price Level")
plt.ylabel("Reaction Intensity (normalized)")
plt.grid(True, alpha=0.3)
plt.show()

#инструмент

📌 Подпишись  Crypto Python❗️
👍41
main.py
9.4 KB
📌"Liquidity Prober" - (пробник ликвидности — активное картирование реальной глубины и refill-реакции стакана) 🧑‍💻

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

Вместо того чтобы полагаться на статический снимок стакана, этот инструмент активно (и осторожно) „прощупывает“ рынок небольшими рыночными/лимитными пробами, фиксирует реальный проскальзывание, скорость восстановления (refill) и поведение цены. По результатам даёт рекомендацию по стратегии исполнения (сколько слайсов, паузы между ними, безопасная доля от баланса).

Полезно для: исполнение больших заявок, алгоритмической дробки, оценки риска слippage перед «прыжком».

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

делает N маленьких проб (probe) в одну сторону (buy или sell) — в dry-run можно только эмулировать; при live — реально отправляет маленькие market/limit ордера;

для каждого пробы фиксирует:

среднюю цену исполнения, проскальзывание vs mid, изменение best bid/ask, и время восстановления объёма в локальной зоне;

- строит статистику: mean/std проскальзывания, среднее время refill;

- на основе результатов выдаёт рекомендацию: slice_count, slice_delay_sec, max_notional_fraction_per_slice.


#инструмент

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