Исходный код
В системном трейдинге использование фиксированного кредитного плеча — это классическая ошибка выжившего. В периоды высокой турбулентности рынка волатильность резко возрастает, увеличивая математическое ожидание просадки. Для защиты капитала профессиональные кванты используют динамическое масштабирование позиций. Представленный ниже класс VolatilityLeverageScaler получает текущее значение индекса ^VIX через API Yahoo Finance и рассчитывает оптимальный размер плеча с использованием степенного затухания.
Этот подход отлично дополняет другие инфраструктурные решения, такие как парсер Open Interest фьючерсов Binance или системы сбора ставок финансирования Bybit в ClickHouse. Для децентрализованных рынков, где VIX напрямую неприменим, кванты часто используют альтернативные метрики ликвидности, например, через мониторинг баланса пулов Uniswap V2 с Web3.py, адаптируя логику под ончейн-метрики.
import numpy as np
import yfinance as yf
class VolatilityLeverageScaler:
def __init__(self, max_leverage: float = 10.0, min_leverage: float = 1.0, vix_ref: float = 15.0, alpha: float = 1.2):
self.max_leverage = max_leverage
self.min_leverage = min_leverage
self.vix_ref = vix_ref
self.alpha = alpha
def fetch_current_vix(self) -> float:
try:
vix_data = yf.Ticker('^VIX')
vix_today = vix_data.history(period='1d')
if not vix_today.empty:
return float(vix_today['Close'].iloc[-1])
else:
raise ValueError('Empty data received for ^VIX')
except Exception as e:
print(f'Error fetching VIX: {e}. Using default reference VIX.')
return self.vix_ref
def calculate_leverage(self, current_vix: float) -> float:
ratio = self.vix_ref / current_vix
scaled_leverage = self.max_leverage * (ratio ** self.alpha)
leverage = np.clip(scaled_leverage, self.min_leverage, self.max_leverage)
return float(round(leverage, 2))
if __name__ == '__main__':
scaler = VolatilityLeverageScaler(
max_leverage=5.0,
min_leverage=1.0,
vix_ref=18.0,
alpha=1.0
)
current_vix = scaler.fetch_current_vix()
dynamic_leverage = scaler.calculate_leverage(current_vix)
print(f'Current VIX: {current_vix}')
print(f'Calculated Dynamic Leverage: {dynamic_leverage}x') Разбор параметров
max_leverage: Максимально допустимое кредитное плечо, которое будет использоваться при минимальной волатильности (рыночном штиле).min_leverage: Минимальный порог кредитного плеча (обычно1.0, то есть торговля без плеча), используемый при экстремальных всплесках VIX.vix_ref: Базовый (референсный) уровень VIX, при котором алгоритм начинает активно снижать плечо. Исторически медиана VIX находится в районе 15-18.alpha: Коэффициент чувствительности (степень затухания). Чем вышеalpha, тем агрессивнее будет снижаться плечо при росте волатильности.
Как запустить
Для запуска скрипта вам понадобятся библиотеки yfinance и numpy. Установите их с помощью команды pip install yfinance numpy. После этого скопируйте код в файл leverage_scaler.py и запустите его в терминале: python leverage_scaler.py. Скрипт автоматически загрузит актуальные рыночные данные и выведет расчетное плечо в консоль.




