-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathInverseETF.py
36 lines (30 loc) · 1.25 KB
/
InverseETF.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
class InverseETF:
def __init__(self, underlying):
self._underlying = underlying
self.inversePrices = None
def pnl(self):
self.calculate()
l = len(self.inversePrices)
initialValue = self.inversePrices[0]
finalValue = self.inversePrices[l-1]
pnl = finalValue - initialValue
return pnl
def percentageYield(self):
return float(self.pnl()) / self.inversePrices[0]
def calculate(self):
underlyingPrices = self._underlying.getPricelist()
underlyingPercentages = [None]
inversePercentages = [None]
for i in range(1, len(underlyingPrices)):
previousValue = underlyingPrices[i-1]
currentValue = underlyingPrices[i]
pnl = currentValue - previousValue
percentage = float(pnl) / previousValue
underlyingPercentages.append(percentage)
inversePercentages.append(-1 * percentage)
inversePrices = [underlyingPrices[0]]
for i in range(1, len(inversePercentages)):
previousValue = inversePrices[i-1]
currentValue = float(previousValue) * (1 + inversePercentages[i])
inversePrices.append(currentValue)
self.inversePrices = inversePrices