Исходный код
Ниже представлен оптимизированный скрипт на Python, который загружает исторические часовые свечи BTC/USDT напрямую через публичный API Binance и рассчитывает показатель Херста методом анализа дисперсии приращений (Variance of Differences).
Если вы работаете с большими объемами тиковых данных BTC/USDT, рекомендуем изучить руководство по конвертации HDF5 в Parquet с партиционированием по датам в Pandas для оптимизации хранения и скорости чтения.
import numpy as np
import pandas as pd
import requests
def fetch_binance_klines(symbol='BTCUSDT', interval='1h', limit=1000):
url = 'https://api.binance.com/api/v3/klines'
params = {
'symbol': symbol,
'interval': interval,
'limit': limit
}
response = requests.get(url, params=params)
response.raise_for_status()
data = response.json()
df = pd.DataFrame(data, columns=[
'open_time', 'open', 'high', 'low', 'close', 'volume',
'close_time', 'quote_asset_volume', 'number_of_trades',
'taker_buy_base_asset_volume', 'taker_buy_quote_asset_volume', 'ignore'
])
df['close'] = df['close'].astype(float)
df['close_time'] = pd.to_datetime(df['close_time'], unit='ms')
return df.set_index('close_time')[['close']]
def calculate_hurst_exponent(price_series, max_lag=100):
'''
Рассчитывает показатель Херста на основе дисперсии разностей (lags).
'''
# Преобразуем цены в логарифмический масштаб
log_prices = np.log(price_series)
lags = range(2, max_lag)
# Вычисляем стандартное отклонение разностей для каждого лага
tau = []
for lag in lags:
diffs = log_prices[lag:] - log_prices[:-lag]
tau.append(np.std(diffs))
# Линейная регрессия в логарифмических координатах
poly = np.polyfit(np.log(lags), np.log(tau), 1)
# Угловой коэффициент (slope) и есть показатель Херста
return poly[0]
if __name__ == '__main__':
print('Загрузка данных BTC/USDT с Binance...')
df = fetch_binance_klines(symbol='BTCUSDT', interval='1h', limit=1000)
prices = df['close'].values
hurst_val = calculate_hurst_exponent(prices, max_lag=100)
print(f'Показатель Херста (H): {hurst_val:.4f}')
if hurst_val < 0.45:
print('Рынок флэтовый (Mean-Reverting). Рекомендуются стратегии возврата к среднему.')
elif hurst_val > 0.55:
print('Рынок трендовый (Persistent). Рекомендуются трендовые стратегии.')
else:
print('Рынок близок к случайному блужданию (Random Walk).')
Разбор параметров
price_series: Одномерный массив цен закрытия (желательно в форматеnumpy.ndarray). Внутри функции значения переводятся в логарифмический масштаб для стабилизации дисперсии.max_lag: Максимальный временной лаг для расчета разностей. Оптимальное значение лежит в диапазоне от 50 до 200. Слишком маленький лаг даст неустойчивую оценку, слишком большой — приведет к нехватке данных.polyfit: Функция из библиотекиnumpy, выполняющая аппроксимацию методом наименьших квадратов. Наклон полученной прямой соответствует показателю Херста.
Как запустить
Для запуска скрипта вам понадобятся библиотеки pandas, numpy и requests. Установите их через терминал:
pip install pandas numpy requests После этого сохраните код в файл hurst_calc.py и запустите его. Скрипт автоматически выгрузит последние 1000 часовых свечей BTC/USDT и выведет текущее значение показателя Херста с интерпретацией рыночной фазы.
Для построения полноценной торговой системы на основе персистентности вам также понадобится Расчет Information Ratio, Alpha и Beta к Bitcoin на Python для оценки эффективности стратегии.
При тестировании стратегий возврата к среднему (mean-reversion) или следования за трендом критически важна настройка комиссий и проскальзывания в Zipline-Reloaded для крипты, так как частые сделки могут быстро уничтожить ваше математическое ожидание прибыли.




