Spaces:
Runtime error
Runtime error
import numpy as np | |
from scipy.stats import norm | |
def calculate_covered_warrant_profit(stock_price, strike_price, warrant_price, conversion_ratio): | |
""" | |
Calculates the profit and break-even price for a covered warrant. | |
Args: | |
stock_price (float): Current price of the underlying stock (S). | |
strike_price (float): The strike price of the warrant (X). | |
warrant_price (float): The price of one warrant (Price). | |
conversion_ratio (float): The conversion ratio (N). | |
Returns: | |
dict: A dictionary containing the 'profit' and 'break_even_price'. | |
""" | |
# Lãi/Lỗ mỗi cổ phiếu cơ sở = (Giá trị nội tại) - (Chi phí mua chứng quyền) | |
# Giá trị nội tại = Giá cổ phiếu cơ sở - Giá thực hiện | |
# Chi phí mua chứng quyền = Giá chứng quyền * Tỷ lệ chuyển đổi | |
profit = (stock_price - strike_price) - (warrant_price * conversion_ratio) | |
# Giá hòa vốn là giá của cổ phiếu cơ sở mà tại đó nhà đầu tư không lãi cũng không lỗ. | |
# Tại điểm hòa vốn, Lãi/Lỗ = 0 | |
# => (Giá hòa vốn - Giá thực hiện) - (Giá chứng quyền * Tỷ lệ chuyển đổi) = 0 | |
# => Giá hòa vốn = Giá thực hiện + (Giá chứng quyền * Tỷ lệ chuyển đổi) | |
break_even_price = strike_price + (warrant_price * conversion_ratio) | |
return { | |
'profit': profit, | |
'break_even_price': break_even_price | |
} | |
def black_scholes_price(S, X, T, r, v, conversion_ratio): | |
""" | |
Calculates the theoretical price of a covered warrant using the Black-Scholes model. | |
Args: | |
S (float): Current price of the underlying stock. | |
X (float): Strike price of the warrant. | |
T (float): Time to expiration in years. | |
r (float): Risk-free interest rate. | |
v (float): Volatility of the underlying stock's returns. | |
conversion_ratio (float): The conversion ratio of the warrant. | |
Returns: | |
float: The theoretical price of one covered warrant. | |
""" | |
if T <= 0 or v <= 0: | |
# If time has expired or volatility is zero, the value is its intrinsic value | |
intrinsic_value = max(0, S - X) | |
return intrinsic_value / conversion_ratio | |
d1 = (np.log(S / X) + (r + 0.5 * v**2) * T) / (v * np.sqrt(T)) | |
d2 = d1 - v * np.sqrt(T) | |
# Calculate the price of a standard call option | |
call_price = (S * norm.cdf(d1) - X * np.exp(-r * T) * norm.cdf(d2)) | |
# Adjust for the conversion ratio | |
warrant_price = call_price / conversion_ratio | |
return warrant_price | |