如何使用 python 正确模拟 cumprod 的对冲头寸?

How to simulate hedging position with cumprod with python correctly?

我试图在 python

上使用单一股票模拟对冲头寸
import yfinance as yf

#getting the data

data = yf.download("AAPL", start="2021-01-01", end="2022-01-01")

#calculating returns
data['Returns'] = data['Close'].pct_change()

#simulating investing 1000$ on the stock
((data['Returns']+1).cumprod() * 1000).plot()

#simulating shorting 1000$ on the stock
((data['Returns']*-1+1).cumprod() * 1000).plot()

一切看起来都不错,但是,如果您将两个头寸相加,它们不会相互抵消,并且投资组合会随着时间的推移而变化,而不是始终保持在 2000 美元。

(((data['Returns']+1).cumprod() * 1000) + ((data['Returns']*-1+1).cumprod() * 1000)).plot()

如果我开相反的头寸,他们应该相互抵消,整个期间投资组合的总价值应该保持在 2000 美元,因为一个头寸的利润将是另一个头寸的损失位置,反之亦然。

我认为这是 .cumprod() 功能的问题,但如何解决这个问题才能获得完全中立的立场?

如果您改为“卖出”1000 美元,这应该有效。所以对冲应该与多头头寸完全相同,使用 1+pct_change,但有 -$1000。这样,整个投资组合始终为 0 美元,即 100% 对冲。

(((data['Returns']+1).cumprod() * 1000) + ((data['Returns']+1).cumprod() * -1000)).plot()

这是必需的,因为您需要在相反方向上进行相同百分比的移动。通过从 1 中减去相同的名义百分比变化,您将不会在第二次乘法后得到相同的结果。

数值上:50 * (1-0.05) = 47.550 * (1+0.05) = 52.5,但是 47.5 * 0.0552.5 * 0.05 不会相等,所以 47.5*(1-0.05) != 52.5*(1+0.05)。因此,您需要使用正 1000 美元和负 1000 美元来完美抵消。