Розроблення системи розраховування позиції на основі ризику
Система розрахунку розміру позиції на основі ризику — основа професійного управління капіталом. Замість «купити на $1000», скажіть «ризикувати $100 при стопе на 5% нижче входу» та автоматично розрахувати обсяг.
Базова формула
Position Qty = Risk Amount / Risk Per Unit
Risk Amount = Portfolio Value × Risk Percent
Risk Per Unit = |Entry Price - Stop Loss Price|
def calculate_position_size(portfolio_value, risk_pct, entry_price, stop_price):
risk_amount = portfolio_value * risk_pct
risk_per_unit = abs(entry_price - stop_price)
if risk_per_unit == 0:
raise ValueError("Stop price equals entry price")
qty = risk_amount / risk_per_unit
position_value = qty * entry_price
return {
'qty': qty,
'position_value': position_value,
'position_pct': position_value / portfolio_value,
'risk_amount': risk_amount,
'risk_pct': risk_pct
}
Приклад: портфель $50,000, ризик 1% ($500), вхід $45,000, стоп $43,200 (4% нижче). Risk Per Unit = $1,800. Qty = 500/1800 = 0.278 BTC. Вартість позиції = $12,500 (25% портфеля).
Розміщення стопу на основі ATR
Розмір стопу краще привязати до ATR, а не до довільного %:
def atr_based_sizing(portfolio_value, risk_pct, entry_price, atr, multiplier=2.0):
stop_distance = atr * multiplier
stop_price = entry_price - stop_distance # для лонга
return calculate_position_size(portfolio_value, risk_pct, entry_price, stop_price)
При ATR 2%: стоп = 4% нижче входу. При ATR 5%: стоп = 10% нижче. Розмір позиції автоматично зменшується при високій волатильності.
Обмеження та перевірки
Ліміт максимального розміру позиції: навіть якщо розрахунок за ризиком дає 50% портфеля, обмежити максимум 20%.
Мінімальний розмір позиції: нижче певного обсягу комісії не виправданні. Пропустити угоду.
Перевірка доступного балансу: наявність коштів на біржі.
Коригування рівня: при використанні плеча: effective_qty = calculated_qty, але margin_required = position_value / leverage.
Контекст портфеля
При кількох відкритих позиціях сукупний ризик не повинен перевищувати ліміт:
def portfolio_adjusted_size(base_size, current_total_risk, max_portfolio_risk, portfolio_value):
remaining_risk_budget = max_portfolio_risk * portfolio_value - current_total_risk
if remaining_risk_budget <= 0:
return 0 # місця в портфелі немає
max_new_risk = min(base_size['risk_amount'], remaining_risk_budget)
scale_factor = max_new_risk / base_size['risk_amount']
return base_size['qty'] * scale_factor
Розробляємо систему розрахунку позиції з ATR-розміром, контролем ризику портфеля, підтримкою плеча та налаштовуваними обмеженнями.







