📌 Dynamic Position Sizing Tool – Адаптивный объём позиции на основе ATR или Equity🧑💻
Суть идеи:🛠️
Dynamic Position Sizing — это подход, при котором размер позиции автоматически адаптируется под:🚀
- волатильность рынка (например, через ATR),
- или размер текущего капитала (equity).
Цель — поддерживать стабильный риск на сделку, независимо от условий.💸
#индикатор
📌 Подпишись Crypto Python❗️
Суть идеи:🛠️
Dynamic Position Sizing — это подход, при котором размер позиции автоматически адаптируется под:🚀
- волатильность рынка (например, через ATR),
- или размер текущего капитала (equity).
Цель — поддерживать стабильный риск на сделку, независимо от условий.💸
import ccxt
import pandas as pd
import talib
# Настройки
exchange = ccxt.binance()
symbol = "BTC/USDT"
timeframe = "1h"
account_equity = 10000 # текущий капитал в USDT
risk_per_trade_pct = 0.01 # риск на сделку (1%)
atr_period = 14
lookback = 100
# Получение данных
ohlcv = exchange.fetch_ohlcv(symbol, timeframe=timeframe, limit=lookback)
df = pd.DataFrame(ohlcv, columns=["ts", "open", "high", "low", "close", "volume"])
atr = talib.ATR(df["high"], df["low"], df["close"], timeperiod=atr_period)
# Расчёт объёма позиции
risk_amount = account_equity * risk_per_trade_pct
atr_last = atr.iloc[-1]
position_size = risk_amount / atr_last # в USDT
entry_price = df["close"].iloc[-1]
qty = position_size / entry_price # в BTC
print(f"ATR: {atr_last:.2f} | Risk: {risk_amount} USDT")
print(f"Размер позиции: {qty:.6f} BTC (эквивалентно {position_size:.2f} USDT)")
#индикатор
📌 Подпишись Crypto Python❗️
🔥9❤🔥2
📌 Detrended Price Oscillator (DPO) – Циклические сигналы без влияния тренда🧑💻
Суть индикатора:🚀
DPO (Detrended Price Oscillator) — осциллятор, созданный для выявления циклических колебаний цены, игнорируя долгосрочный тренд.
В отличие от большинства осцилляторов, DPO не используется для генерации сигналов тренда, а фокусируется на короткосрочной перекупленности/перепроданности.
#индикатор
📌 Подпишись Crypto Python❗️
Суть индикатора:🚀
DPO (Detrended Price Oscillator) — осциллятор, созданный для выявления циклических колебаний цены, игнорируя долгосрочный тренд.
В отличие от большинства осцилляторов, DPO не используется для генерации сигналов тренда, а фокусируется на короткосрочной перекупленности/перепроданности.
import ccxt
import pandas as pd
# Настройки
exchange = ccxt.binance()
symbol = "BTC/USDT"
timeframe = "1h"
period = 14
# Загрузка исторических данных
ohlcv = exchange.fetch_ohlcv(symbol, timeframe=timeframe, limit=200)
df = pd.DataFrame(ohlcv, columns=["ts", "open", "high", "low", "close", "volume"])
df["ts"] = pd.to_datetime(df["ts"], unit="ms")
# Расчёт DPO
shift = int(period / 2 + 1)
df["sma"] = df["close"].rolling(window=period).mean()
df["dpo"] = df["close"].shift(shift) - df["sma"]
# Пример последних значений
print(df[["ts", "close", "dpo"]].tail(10))
#индикатор
📌 Подпишись Crypto Python❗️
👍7❤🔥1🔥1
📌 Whale Wallet Tracking Strategy – Реакция на перемещения с крупных кошельков🧑💻
Суть стратегии:🚀
Крупные кошельки ("whales") часто принадлежат биржам, фондам, институционалам или ранним инвесторам.
Мониторинг их активности позволяет:
- Предугадывать возможную продажу или покупку,
- Реагировать на переводы на биржи (продажа) или с выводом с бирж (накопление),
- Использовать в стратегиях как фильтр или триггер.
Источники данных:💸
Whale Alert API
Glassnode – аналитика перемещений
Arkham Intelligence – адреса по именам
Onchain API (например, через etherscan, blockchair, bitquery, chainbase)
#индикатор
📌 Подпишись Crypto Python❗️
Суть стратегии:🚀
Крупные кошельки ("whales") часто принадлежат биржам, фондам, институционалам или ранним инвесторам.
Мониторинг их активности позволяет:
- Предугадывать возможную продажу или покупку,
- Реагировать на переводы на биржи (продажа) или с выводом с бирж (накопление),
- Использовать в стратегиях как фильтр или триггер.
Источники данных:💸
Whale Alert API
Glassnode – аналитика перемещений
Arkham Intelligence – адреса по именам
Onchain API (например, через etherscan, blockchair, bitquery, chainbase)
import requests
import time
API_KEY = "YOUR_WHALE_ALERT_API_KEY"
MIN_VALUE = 500000 # USD
INTERVAL = 60 # сек
def fetch_transfers():
url = "https://api.whale-alert.io/v1/transactions"
params = {
"api_key": API_KEY,
"min_value": MIN_VALUE,
"currency": "btc",
"limit": 10
}
r = requests.get(url, params=params)
data = r.json()
return data.get("transactions", [])
def parse_transfer(tx):
direction = "→ EXCHANGE" if tx["to"]["owner_type"] == "exchange" else "← FROM EXCHANGE"
print(f"[{tx['timestamp']}] {tx['amount']} BTC {direction} | From: {tx['from']['owner']} → {tx['to']['owner']}")
if __name__ == "__main__":
while True:
txs = fetch_transfers()
for tx in txs:
parse_transfer(tx)
time.sleep(INTERVAL)
#индикатор
📌 Подпишись Crypto Python❗️
👍8🔥4👏2❤🔥1
📌 Volatility Regime Classifier – Классификация рынка на флет и тренд🧑💻
Суть идеи:🚀
Рынок постоянно переходит между двумя основными режимами:
Тренд — направленное движение (вверх или вниз),
Флет — боковик, консолидация, низкая волатильность.
Цель стратегии:🛠️
автоматически определить текущий режим рынка, чтобы:
- применять подходящую стратегию (например, трендовая/флетовая),
- фильтровать ложные сигналы,
- управлять рисками.
#индикатор
📌 Подпишись Crypto Python❗️
Суть идеи:🚀
Рынок постоянно переходит между двумя основными режимами:
Тренд — направленное движение (вверх или вниз),
Флет — боковик, консолидация, низкая волатильность.
Цель стратегии:🛠️
автоматически определить текущий режим рынка, чтобы:
- применять подходящую стратегию (например, трендовая/флетовая),
- фильтровать ложные сигналы,
- управлять рисками.
import ccxt
import pandas as pd
import talib
# Параметры
exchange = ccxt.binance()
symbol = "BTC/USDT"
timeframe = "1h"
atr_period = 14
lookback = 150
volatility_threshold = 100 # например, 100 USDT по BTC
# Получение данных
ohlcv = exchange.fetch_ohlcv(symbol, timeframe=timeframe, limit=lookback)
df = pd.DataFrame(ohlcv, columns=["ts", "open", "high", "low", "close", "volume"])
df["ts"] = pd.to_datetime(df["ts"], unit="ms")
# Расчёт ATR (волатильности)
df["atr"] = talib.ATR(df["high"], df["low"], df["close"], timeperiod=atr_period)
# Классификация режима
df["regime"] = "flat"
df.loc[df["atr"] > volatility_threshold, "regime"] = "trend"
# Последнее состояние
last = df.iloc[-1]
print(f"Последний режим рынка: {last['regime'].upper()} (ATR = {last['atr']:.2f})")
#индикатор
📌 Подпишись Crypto Python❗️
👍7🔥4❤🔥1
📌 Ehler’s Fisher Transform – Определение экстремумов через нормализацию🧑💻
Суть индикатора:🛠️
Fisher Transform от Джона Эйлерса — это математическая трансформация, которая переводит данные в псевдо-нормальное распределение, усиливая крайние значения (экстремумы).
Он помогает точнее выявлять разворотные точки, особенно в сочетании с другими осцилляторами.
Типовые сигналы:💸
- Пересечение нуля: возможный разворот
- Выход за уровни ±1.5 или ±2: перекупленность/перепроданность
#индикатор
📌 Подпишись Crypto Python❗️
Суть индикатора:🛠️
Fisher Transform от Джона Эйлерса — это математическая трансформация, которая переводит данные в псевдо-нормальное распределение, усиливая крайние значения (экстремумы).
Он помогает точнее выявлять разворотные точки, особенно в сочетании с другими осцилляторами.
Типовые сигналы:💸
- Пересечение нуля: возможный разворот
- Выход за уровни ±1.5 или ±2: перекупленность/перепроданность
import ccxt
import pandas as pd
import numpy as np
# Получение данных
exchange = ccxt.binance()
symbol = "BTC/USDT"
tf = "1h"
limit = 300
ohlcv = exchange.fetch_ohlcv(symbol, timeframe=tf, limit=limit)
df = pd.DataFrame(ohlcv, columns=["ts", "open", "high", "low", "close", "volume"])
df["ts"] = pd.to_datetime(df["ts"], unit="ms")
# Fisher Transform
length = 10
price = (df["high"] + df["low"]) / 2
min_low = price.rolling(length).min()
max_high = price.rolling(length).max()
value = 2 * ((price - min_low) / (max_high - min_low + 1e-9) - 0.5)
# Ограничим значения от -0.999 до 0.999
value = value.clip(-0.999, 0.999)
# Применим трансформацию
fisher = 0.5 * np.log((1 + value) / (1 - value))
df["fisher"] = fisher.rolling(3).mean()
# Последние значения
print(df[["ts", "close", "fisher"]].tail(10))
#индикатор
📌 Подпишись Crypto Python❗️
👍7🔥3
📌 Fractal Adaptive Moving Average (FRAMA) – Адаптивная скользящая средняя на фрактальной основе🧑💻
Суть индикатора:🛠️
FRAMA — это усовершенствованная скользящая средняя, предложенная Джоном Эйлерсом, которая:
- адаптируется к рыночной волатильности,
- становится гладкой во флете и быстрой в тренде,
- основана на оценке фрактальной размерности цены (измерение "неровности").
#индикатор
📌 Подпишись Crypto Python❗️
Суть индикатора:🛠️
FRAMA — это усовершенствованная скользящая средняя, предложенная Джоном Эйлерсом, которая:
- адаптируется к рыночной волатильности,
- становится гладкой во флете и быстрой в тренде,
- основана на оценке фрактальной размерности цены (измерение "неровности").
import ccxt
import pandas as pd
import numpy as np
# Настройки
symbol = "BTC/USDT"
timeframe = "1h"
n = 16 # длина окна FRAMA
w = 5 # размер сегмента внутри окна
exchange = ccxt.binance()
ohlcv = exchange.fetch_ohlcv(symbol, timeframe=timeframe, limit=300)
df = pd.DataFrame(ohlcv, columns=["ts", "open", "high", "low", "close", "volume"])
df["ts"] = pd.to_datetime(df["ts"], unit="ms")
def frama(close, n=16, w=5):
alpha_min = 0.01
alpha_max = 1.0
frama = [close[0]]
for i in range(1, len(close)):
if i < n:
frama.append(close[i])
continue
hl = close[i - n + 1:i + 1]
hl1 = close[i - n + 1:i - n//2 + 1]
hl2 = close[i - n//2 + 1:i + 1]
n1 = (hl1.max() - hl1.min()) / (n // 2)
n2 = (hl2.max() - hl2.min()) / (n // 2)
n3 = (hl.max() - hl.min()) / n
if n1 > 0 and n2 > 0 and n3 > 0:
D = (np.log(n1 + n2) - np.log(n3)) / np.log(2)
alpha = np.exp(-4.6 * (D - 1))
alpha = min(max(alpha, alpha_min), alpha_max)
else:
alpha = alpha_min
frama_val = alpha * close[i] + (1 - alpha) * frama[-1]
frama.append(frama_val)
return pd.Series(frama, index=close.index)
# Применение
df["frama"] = frama(df["close"])
# Вывод последних значений
print(df[["ts", "close", "frama"]].tail(10))
#индикатор
📌 Подпишись Crypto Python❗️
👍6🔥4
📌 Hull Moving Average Crossover – Cтратегия пересечения HMA🧑💻
Суть индикатора:🚀
Hull Moving Average (HMA) — это гладкая и быстро реагирующая скользящая средняя, разработанная Аланом Халлом.
Она снижает запаздывание обычных MA (например, EMA) и при этом остаётся плавной.
Пересечение двух HMA с разными периодами может использоваться как сигнал к входу или выходу.
Сигналы стратегии:🛠️
- Buy: HMA_fast пересекает HMA_slow снизу вверх
- Sell: HMA_fast пересекает HMA_slow сверху вниз
#индикатор
📌 Подпишись Crypto Python❗️
Суть индикатора:🚀
Hull Moving Average (HMA) — это гладкая и быстро реагирующая скользящая средняя, разработанная Аланом Халлом.
Она снижает запаздывание обычных MA (например, EMA) и при этом остаётся плавной.
Пересечение двух HMA с разными периодами может использоваться как сигнал к входу или выходу.
Сигналы стратегии:🛠️
- Buy: HMA_fast пересекает HMA_slow снизу вверх
- Sell: HMA_fast пересекает HMA_slow сверху вниз
import ccxt
import pandas as pd
import numpy as np
def wma(series, period):
weights = np.arange(1, period + 1)
return series.rolling(period).apply(lambda prices: np.dot(prices, weights)/weights.sum(), raw=True)
def hma(series, period):
half = int(period / 2)
sqrt_p = int(np.sqrt(period))
wma_half = wma(series, half)
wma_full = wma(series, period)
raw = 2 * wma_half - wma_full
return wma(raw, sqrt_p)
# Данные с Binance
exchange = ccxt.binance()
symbol = "BTC/USDT"
tf = "1h"
ohlcv = exchange.fetch_ohlcv(symbol, timeframe=tf, limit=200)
df = pd.DataFrame(ohlcv, columns=["ts", "open", "high", "low", "close", "volume"])
df["ts"] = pd.to_datetime(df["ts"], unit="ms")
# HMA
df["hma_fast"] = hma(df["close"], 14)
df["hma_slow"] = hma(df["close"], 55)
# Сигналы пересечения
df["signal"] = 0
df.loc[(df["hma_fast"] > df["hma_slow"]) & (df["hma_fast"].shift() <= df["hma_slow"].shift()), "signal"] = 1 # BUY
df.loc[(df["hma_fast"] < df["hma_slow"]) & (df["hma_fast"].shift() >= df["hma_slow"].shift()), "signal"] = -1 # SELL
# Вывод последних сигналов
print(df[["ts", "close", "hma_fast", "hma_slow", "signal"]].tail(10))
#индикатор
📌 Подпишись Crypto Python❗️
❤🔥6🔥4👍3
📌 Chande Momentum Oscillator Strategy – Фильтрация силы движения🧑💻
Суть индикатора:🛠️
Chande Momentum Oscillator (CMO) — осциллятор, разработанный Тушаром Чандом, отражает силу направленного движения цены.
Он похож на RSI, но:
- Использует абсолютные значения приростов и спадов
- Колеблется от −100 до +100
- Быстро реагирует на смену импульса
Типовые сигналы:💸
- CMO > +50 → сильный восходящий импульс (возможность входа в лонг)
- CMO < −50 → сильный нисходящий импульс (шорт или избегать лонга)
- CMO между −20 и +20 → флет / слабое движение
- Пересечения нуля → смена направления
#индикатор
📌 Подпишись Crypto Python❗️
Суть индикатора:🛠️
Chande Momentum Oscillator (CMO) — осциллятор, разработанный Тушаром Чандом, отражает силу направленного движения цены.
Он похож на RSI, но:
- Использует абсолютные значения приростов и спадов
- Колеблется от −100 до +100
- Быстро реагирует на смену импульса
Типовые сигналы:💸
- CMO > +50 → сильный восходящий импульс (возможность входа в лонг)
- CMO < −50 → сильный нисходящий импульс (шорт или избегать лонга)
- CMO между −20 и +20 → флет / слабое движение
- Пересечения нуля → смена направления
import ccxt
import pandas as pd
import talib
# Настройки
exchange = ccxt.binance()
symbol = "BTC/USDT"
timeframe = "1h"
limit = 200
# Получение данных
ohlcv = exchange.fetch_ohlcv(symbol, timeframe=timeframe, limit=limit)
df = pd.DataFrame(ohlcv, columns=["ts", "open", "high", "low", "close", "volume"])
df["ts"] = pd.to_datetime(df["ts"], unit="ms")
# Расчёт CMO
df["cmo"] = talib.CMO(df["close"], timeperiod=14)
# Сигналы
df["signal"] = 0
df.loc[df["cmo"] > 50, "signal"] = 1 # Buy
df.loc[df["cmo"] < -50, "signal"] = -1 # Sell
# Вывод последних значений
print(df[["ts", "close", "cmo", "signal"]].tail(10))
#индикатор
📌 Подпишись Crypto Python❗️
👍9🔥3❤🔥2
📌SuperTrend Indicator Strategy – Следование за трендом с динамическим уровнем🧑💻
Суть индикатора:🛠️
SuperTrend — трендовый индикатор, который строится на основе:
- ATR (среднего истинного диапазона) — измеряет волатильность,
- цены закрытия — для направления сигнала.
Он рисует динамический уровень поддержки/сопротивления, который перерисовывается при смене тренда.
Используется для:🧨
- входа в направлении тренда,
- удержания позиции,
- выставления трейлинг-стопа.
Сигналы:💸
- Цена пересекает SuperTrend снизу вверх → сигнал на покупку
- Цена пересекает SuperTrend сверху вниз → сигнал на продажу
#индикатор
📌 Подпишись Crypto Python❗️
Суть индикатора:🛠️
SuperTrend — трендовый индикатор, который строится на основе:
- ATR (среднего истинного диапазона) — измеряет волатильность,
- цены закрытия — для направления сигнала.
Он рисует динамический уровень поддержки/сопротивления, который перерисовывается при смене тренда.
Используется для:🧨
- входа в направлении тренда,
- удержания позиции,
- выставления трейлинг-стопа.
Сигналы:💸
- Цена пересекает SuperTrend снизу вверх → сигнал на покупку
- Цена пересекает SuperTrend сверху вниз → сигнал на продажу
import ccxt
import pandas as pd
import ta
# Получение данных
exchange = ccxt.binance()
symbol = "BTC/USDT"
ohlcv = exchange.fetch_ohlcv(symbol, timeframe="1h", limit=200)
df = pd.DataFrame(ohlcv, columns=["ts", "open", "high", "low", "close", "volume"])
df["ts"] = pd.to_datetime(df["ts"], unit="ms")
# Параметры SuperTrend
atr_period = 10
multiplier = 3.0
# Расчёт ATR
atr = ta.volatility.AverageTrueRange(high=df["high"], low=df["low"], close=df["close"], window=atr_period).average_true_range()
hl2 = (df["high"] + df["low"]) / 2
df["upperband"] = hl2 + (multiplier * atr)
df["lowerband"] = hl2 - (multiplier * atr)
# Логика SuperTrend
supertrend = []
direction = []
for i in range(len(df)):
if i == 0:
supertrend.append(df["upperband"][i])
direction.append(1)
else:
if df["close"][i] > supertrend[i-1]:
supertrend.append(df["lowerband"][i])
direction.append(1)
elif df["close"][i] < supertrend[i-1]:
supertrend.append(df["upperband"][i])
direction.append(-1)
else:
supertrend.append(supertrend[i-1])
direction.append(direction[i-1])
df["supertrend"] = supertrend
df["trend"] = direction
# Сигналы
df["signal"] = 0
df.loc[(df["trend"] == 1) & (df["trend"].shift(1) == -1), "signal"] = 1 # Покупка
df.loc[(df["trend"] == -1) & (df["trend"].shift(1) == 1), "signal"] = -1 # Продажа
# Вывод последних сигналов
print(df[["ts", "close", "supertrend", "trend", "signal"]].tail(10))
#индикатор
📌 Подпишись Crypto Python❗️
🔥5👍4❤🔥3
📌Schaff Trend Cycle Strategy – Быстрые сигналы на основе MACD и рыночных циклов🧑💻
Суть индикатора:🛠️
Schaff Trend Cycle (STC) — это модифицированная версия MACD, разработанная Дугом Шаффом, которая сочетает:
- трендовые свойства MACD,
- фильтрацию через цикличность рынка (с помощью двойного применения стохастика).
В результате получается более быстрый и точный индикатор, чем MACD, с меньшим запаздыванием.
Основные сигналы STC:💸
- STC поднимается выше 25 или 50 → сигнал на покупку
- STC опускается ниже 75 или 50 → сигнал на продажу
- Также используются пересечения порогов и дивергенции как подтверждение
#индикатор
📌 Подпишись Crypto Python❗️
Суть индикатора:🛠️
Schaff Trend Cycle (STC) — это модифицированная версия MACD, разработанная Дугом Шаффом, которая сочетает:
- трендовые свойства MACD,
- фильтрацию через цикличность рынка (с помощью двойного применения стохастика).
В результате получается более быстрый и точный индикатор, чем MACD, с меньшим запаздыванием.
Основные сигналы STC:💸
- STC поднимается выше 25 или 50 → сигнал на покупку
- STC опускается ниже 75 или 50 → сигнал на продажу
- Также используются пересечения порогов и дивергенции как подтверждение
import ccxt
import pandas as pd
import numpy as np
import ta
# Получение данных
exchange = ccxt.binance()
symbol = "BTC/USDT"
ohlcv = exchange.fetch_ohlcv(symbol, timeframe="1h", limit=200)
df = pd.DataFrame(ohlcv, columns=["ts", "open", "high", "low", "close", "volume"])
df["ts"] = pd.to_datetime(df["ts"], unit="ms")
# Шаг 1: MACD
macd_line = ta.trend.macd(df["close"], window_slow=26, window_fast=12)
macd_signal = ta.trend.macd_signal(df["close"], window_slow=26, window_fast=12, window_sign=9)
macd_hist = macd_line - macd_signal
# Шаг 2: Стохастик от MACD
lowest = macd_hist.rolling(window=10).min()
highest = macd_hist.rolling(window=10).max()
stoch = 100 * (macd_hist - lowest) / (highest - lowest + 1e-9)
# Шаг 3: Стохастик от стохастика (фильтр циклов)
stc = stoch.rolling(window=3).mean()
df["stc"] = stc
# Генерация сигналов
df["signal"] = 0
df.loc[(df["stc"] > 25) & (df["stc"].shift() <= 25), "signal"] = 1 # Buy
df.loc[(df["stc"] < 75) & (df["stc"].shift() >= 75), "signal"] = -1 # Sell
# Вывод последних сигналов
print(df[["ts", "close", "stc", "signal"]].tail(10))
#индикатор
📌 Подпишись Crypto Python❗️
👍6❤🔥1🔥1
📌Fisher Transform Trend Filter – фильтрация фейковых движений с помощью индикатора Фишера🧑💻
Суть стратегии:🛠️
Fisher Transform — это осциллятор, который преобразует ценовое движение в нормальное распределение, делая развороты и тренды более чёткими и симметричными.
Применяется как тренд-фильтр или точка разворота, особенно для:💸
- Фильтрации ложных импульсов,
- Подтверждения сигнала входа,
- Точечного выхода из позиции.
Преимущества Fisher Transform:💸
- Улавливает экстремумы с меньшим запаздыванием, чем RSI
- Хорошо работает в связке с другими трендовыми индикаторами (EMA, ADX)
- Идеален для фильтрации входов только по сильным разворотам
#индикатор
📌 Подпишись Crypto Python❗️
Суть стратегии:🛠️
Fisher Transform — это осциллятор, который преобразует ценовое движение в нормальное распределение, делая развороты и тренды более чёткими и симметричными.
Применяется как тренд-фильтр или точка разворота, особенно для:💸
- Фильтрации ложных импульсов,
- Подтверждения сигнала входа,
- Точечного выхода из позиции.
Преимущества Fisher Transform:💸
- Улавливает экстремумы с меньшим запаздыванием, чем RSI
- Хорошо работает в связке с другими трендовыми индикаторами (EMA, ADX)
- Идеален для фильтрации входов только по сильным разворотам
import ccxt
import pandas as pd
import numpy as np
# Данные
exchange = ccxt.binance()
symbol = "BTC/USDT"
ohlcv = exchange.fetch_ohlcv(symbol, timeframe="1h", limit=500)
df = pd.DataFrame(ohlcv, columns=["ts", "open", "high", "low", "close", "volume"])
df["ts"] = pd.to_datetime(df["ts"], unit="ms")
# Настройки Fisher
period = 10
hl2 = (df["high"] + df["low"]) / 2
min_low = hl2.rolling(window=period).min()
max_high = hl2.rolling(window=period).max()
# Нормализация
value = 2 * ((hl2 - min_low) / (max_high - min_low + 1e-9) - 0.5)
value = value.clip(-0.999, 0.999)
# Расчёт Fisher Transform
fisher = 0.5 * np.log((1 + value) / (1 - value))
df["fisher"] = fisher.rolling(2).mean()
# Сигналы
df["signal"] = 0
df.loc[(df["fisher"] > 0) & (df["fisher"].shift(1) < 0), "signal"] = 1 # Лонг
df.loc[(df["fisher"] < 0) & (df["fisher"].shift(1) > 0), "signal"] = -1 # Шорт
# Вывод последних сигналов
print(df[["ts", "close", "fisher", "signal"]].tail(10))
#индикатор
📌 Подпишись Crypto Python❗️
👍10❤3🔥2
📌VWAP Imbalance Entry – Вход при смещении торгов к одной стороне от VWAP🧑💻
Суть стратегии:🛠️
VWAP (Volume Weighted Average Price) — это средневзвешенная цена сделки по объёму.
Она часто выступает как балансная точка между покупателями и продавцами.
Когда цена и объёмы сильно сдвинуты на одну сторону от VWAP, это может сигнализировать о:
- доминировании одной стороны (покупатели или продавцы),
- готовности к импульсу или продолжению движения,
- потенциальном входе в позицию по направлению дисбаланса.
Принцип стратегии:💸
1. Вычисляем VWAP за сессию или торговый период
2. Анализируем, где проходит основной объём сделок — выше или ниже VWAP
3. Если 70%+ объёма идёт выше VWAP → лонговое смещение
4. Если 70%+ ниже VWAP → шортовое смещение
5. Вход по направлению дисбаланса (в сторону, где сосредоточен объём)
#индикатор
📌 Подпишись Crypto Python❗️
Суть стратегии:🛠️
VWAP (Volume Weighted Average Price) — это средневзвешенная цена сделки по объёму.
Она часто выступает как балансная точка между покупателями и продавцами.
Когда цена и объёмы сильно сдвинуты на одну сторону от VWAP, это может сигнализировать о:
- доминировании одной стороны (покупатели или продавцы),
- готовности к импульсу или продолжению движения,
- потенциальном входе в позицию по направлению дисбаланса.
Принцип стратегии:💸
1. Вычисляем VWAP за сессию или торговый период
2. Анализируем, где проходит основной объём сделок — выше или ниже VWAP
3. Если 70%+ объёма идёт выше VWAP → лонговое смещение
4. Если 70%+ ниже VWAP → шортовое смещение
5. Вход по направлению дисбаланса (в сторону, где сосредоточен объём)
import ccxt
import pandas as pd
exchange = ccxt.binance()
symbol = "BTC/USDT"
limit = 200
tf = "1m"
# Получаем свечи
ohlcv = exchange.fetch_ohlcv(symbol, timeframe=tf, limit=limit)
df = pd.DataFrame(ohlcv, columns=["ts", "open", "high", "low", "close", "volume"])
df["ts"] = pd.to_datetime(df["ts"], unit="ms")
# Расчёт VWAP вручную
df["tp"] = (df["high"] + df["low"] + df["close"]) / 3
df["vwap_num"] = df["tp"] * df["volume"]
df["cum_vol"] = df["volume"].cumsum()
df["cum_vwap"] = df["vwap_num"].cumsum()
df["vwap"] = df["cum_vwap"] / df["cum_vol"]
# Определим, где прошёл объём — выше или ниже VWAP
df["side"] = df["close"] > df["vwap"]
above_vol = df[df["side"] == True]["volume"].sum()
below_vol = df[df["side"] == False]["volume"].sum()
total_vol = df["volume"].sum()
above_pct = above_vol / total_vol * 100
below_pct = below_vol / total_vol * 100
print(f"Объём выше VWAP: {above_pct:.1f}% | ниже VWAP: {below_pct:.1f}%")
# Генерация сигнала
if above_pct > 70:
print("⚡ Объём сконцентрирован выше VWAP → сигнал на ЛОНГ")
elif below_pct > 70:
print("⚡ Объём сконцентрирован ниже VWAP → сигнал на ШОРТ")
else:
print("Нет чёткого дисбаланса по VWAP")
#индикатор
📌 Подпишись Crypto Python❗️
👍8❤🔥3
📌CCI Breakout Strategy – Вход при выходе CCI из зоны ±100🧑💻
Суть стратегии:🛠️
CCI (Commodity Channel Index) — осциллятор, измеряющий отклонение цены от её средней.
Значения в диапазоне ±100 считаются нормой, выход за пределы — сигнал силы.
Принцип стратегии:💸
Buy, когда CCI выходит выше +100 → сигнал восходящего импульса
Sell, когда CCI уходит ниже -100 → сигнал нисходящего импульса
#индикатор
📌 Подпишись Crypto Python❗️
Суть стратегии:🛠️
CCI (Commodity Channel Index) — осциллятор, измеряющий отклонение цены от её средней.
Значения в диапазоне ±100 считаются нормой, выход за пределы — сигнал силы.
Принцип стратегии:💸
Buy, когда CCI выходит выше +100 → сигнал восходящего импульса
Sell, когда CCI уходит ниже -100 → сигнал нисходящего импульса
import ccxt
import pandas as pd
import ta
# Данные с Binance
exchange = ccxt.binance()
symbol = "BTC/USDT"
ohlcv = exchange.fetch_ohlcv(symbol, timeframe="1h", limit=200)
df = pd.DataFrame(ohlcv, columns=["ts", "open", "high", "low", "close", "volume"])
df["ts"] = pd.to_datetime(df["ts"], unit="ms")
# CCI
cci = ta.trend.CCIIndicator(high=df["high"], low=df["low"], close=df["close"], window=20)
df["cci"] = cci.cci()
# Сигналы
df["signal"] = 0
df.loc[(df["cci"].shift(1) < 100) & (df["cci"] > 100), "signal"] = 1 # Вход в ЛОНГ
df.loc[(df["cci"].shift(1) > -100) & (df["cci"] < -100), "signal"] = -1 # Вход в ШОРТ
# Вывод
print(df[["ts", "close", "cci", "signal"]].tail(10))
#индикатор
📌 Подпишись Crypto Python❗️
👍8❤2🔥1
📌Slope of MA as Filter – Фильтрация сигналов по наклону скользящей средней🧑💻
Суть стратегии:🛠️
Скользящая средняя (MA) сама по себе показывает направление тренда,
но угол наклона MA (градиент) даёт информацию о силе этого тренда.
Фильтрация по наклону MA позволяет:🚀
- Исключать сделки во флэте,
- Входить только по направлению устойчивого движения,
- Повышать точность сигналов любой стратегии (пересечения, пробои, свечные паттерны и т.д.).
Как рассчитать наклон MA:🛠️
MA(t) — значение скользящей на текущей свече
MA(t - N) — значение MA N свечей назад
slope = (MA(t) - MA(t-N)) / N
Это приближённый градиент/угол наклона.
Можно интерпретировать:💸
slope > 0 — восходящий тренд
slope < 0 — нисходящий
abs(slope) мал — рынок во флэте
#индикатор
📌 Подпишись Crypto Python❗️
Суть стратегии:🛠️
Скользящая средняя (MA) сама по себе показывает направление тренда,
но угол наклона MA (градиент) даёт информацию о силе этого тренда.
Фильтрация по наклону MA позволяет:🚀
- Исключать сделки во флэте,
- Входить только по направлению устойчивого движения,
- Повышать точность сигналов любой стратегии (пересечения, пробои, свечные паттерны и т.д.).
Как рассчитать наклон MA:🛠️
MA(t) — значение скользящей на текущей свече
MA(t - N) — значение MA N свечей назад
slope = (MA(t) - MA(t-N)) / N
Это приближённый градиент/угол наклона.
Можно интерпретировать:💸
slope > 0 — восходящий тренд
slope < 0 — нисходящий
abs(slope) мал — рынок во флэте
import ccxt
import pandas as pd
import ta
# Получение данных
exchange = ccxt.binance()
symbol = "BTC/USDT"
ohlcv = exchange.fetch_ohlcv(symbol, timeframe="1h", limit=300)
df = pd.DataFrame(ohlcv, columns=["ts", "open", "high", "low", "close", "volume"])
df["ts"] = pd.to_datetime(df["ts"], unit="ms")
# EMA и её наклон
period = 50
df["ema"] = ta.trend.ema_indicator(df["close"], window=period).ema_indicator()
# Расчёт наклона (на 5 свечей назад)
df["ema_slope"] = (df["ema"] - df["ema"].shift(5)) / 5
# Фильтр: считаем тренд сильным, если slope > 10 (например, в $)
df["trend_filter"] = 0
df.loc[df["ema_slope"] > 10, "trend_filter"] = 1 # Uptrend
df.loc[df["ema_slope"] < -10, "trend_filter"] = -1 # Downtrend
# Вывод
print(df[["ts", "close", "ema", "ema_slope", "trend_filter"]].tail(10))
#индикатор
📌 Подпишись Crypto Python❗️
👍7🔥5❤🔥2