交易策略:计算投资价值
Trading strategy : Computing value of an Investment
我是 Python 的新手,这是我的问题:
我有这个数据框:
pf = pd.DataFrame({'Dates':['2018-07-31','2018-07-31','2018-08-31','2018-08-31','2018-09-30','2018-09-30'],
"Name":["Apple",'Faceook','JP Morgan',"Boeing",'Tesla','Disney'],
"Monthly Return":[-0.02,0.11,-0.03, 0.02,-0.08,0.10],
"Total Weight":[0.7,0.2,0.1,0.5,0.3,0.2]})
我的objective是return我根据每个月的股票、权重和return投资的最终价值。
假设我们从 1.000 美元开始。
我正在寻找类似下面的东西,假设每个月的剩余资金是
完全再投资
Dates Name Monthly Return Total Weight P&L Remaining Investment
0 2018-07-31 Apple -0.02 0.7 686
1 2018-07-31 Faceook 0.11 0.3 333 1019
2 2018-08-31 JP Morgan -0.03 0.5 494.21
3 2018-08-31 Boeing 0.02 0.5 519.69 1013.91
4 2018-09-30 Tesla -0.08 0.1 93.28
5 2018-09-30 Disney 0.10 0.9 1003.77 1097.05
我是这样开始的:
A = 1000
pf['P&L']= A * pf['Total Weight'] * (1+pf['Monthly Return'])
但问题是,这仅适用于第一个月,但不适用于其他月份,因为我们不这样做
起点相同(7 月 31 日为 1000 美元,8 月 31 日为 1019 美元)。
我是否必须创建一个循环?
如果您有任何解决此问题的想法,请随时分享!
谢谢!
对于这样的事情,使用零美元投资组合跟踪 return 会更容易。
df = pd.DataFrame({'Dates':['2018-07-31','2018-07-31','2018-08-31','2018-08-31','2018-09-30','2018-09-30'],
"Name":["Apple",'Faceook','JP Morgan',"Boeing",'Tesla','Disney'],
"Monthly Return":[-0.02,0.11,-0.03, 0.02,-0.08,0.10],
"Total Weight":[0.7,0.2,0.1,0.5,0.3,0.2]})
df['weighted_return'] = df['Monthly Return'] * df['Total Weight']
rets = df.groupby(['Dates'])['weighted_return'].sum()
cumulative_rets = (rets + 1).cumprod() - 1
cumulative_rets
所以你的 return 系列是:
Dates
2018-07-31 0.00800
2018-08-31 0.01506
2018-09-30 0.01100
Name: weighted_return, dtype: float64
现在您可以考虑如何合并交易成本、滑点等。零美元投资组合方法的主要问题是它假设您可以购买部分股票。通常这种零美元方法用于学术论文。
您应该查看 pyfolio
来展示结果和计算风险指标。
假设我们有一个稳定的每月 return。然后我们需要额外的整数变量months
。
investment = 1000
months = 1
pf['P&L'] = investment * pf['Total Weight'] * (1+pf['Monthly Return'])**months
我是 Python 的新手,这是我的问题:
我有这个数据框:
pf = pd.DataFrame({'Dates':['2018-07-31','2018-07-31','2018-08-31','2018-08-31','2018-09-30','2018-09-30'],
"Name":["Apple",'Faceook','JP Morgan',"Boeing",'Tesla','Disney'],
"Monthly Return":[-0.02,0.11,-0.03, 0.02,-0.08,0.10],
"Total Weight":[0.7,0.2,0.1,0.5,0.3,0.2]})
我的objective是return我根据每个月的股票、权重和return投资的最终价值。
假设我们从 1.000 美元开始。 我正在寻找类似下面的东西,假设每个月的剩余资金是 完全再投资
Dates Name Monthly Return Total Weight P&L Remaining Investment
0 2018-07-31 Apple -0.02 0.7 686
1 2018-07-31 Faceook 0.11 0.3 333 1019
2 2018-08-31 JP Morgan -0.03 0.5 494.21
3 2018-08-31 Boeing 0.02 0.5 519.69 1013.91
4 2018-09-30 Tesla -0.08 0.1 93.28
5 2018-09-30 Disney 0.10 0.9 1003.77 1097.05
我是这样开始的:
A = 1000
pf['P&L']= A * pf['Total Weight'] * (1+pf['Monthly Return'])
但问题是,这仅适用于第一个月,但不适用于其他月份,因为我们不这样做 起点相同(7 月 31 日为 1000 美元,8 月 31 日为 1019 美元)。
我是否必须创建一个循环?
如果您有任何解决此问题的想法,请随时分享! 谢谢!
对于这样的事情,使用零美元投资组合跟踪 return 会更容易。
df = pd.DataFrame({'Dates':['2018-07-31','2018-07-31','2018-08-31','2018-08-31','2018-09-30','2018-09-30'],
"Name":["Apple",'Faceook','JP Morgan',"Boeing",'Tesla','Disney'],
"Monthly Return":[-0.02,0.11,-0.03, 0.02,-0.08,0.10],
"Total Weight":[0.7,0.2,0.1,0.5,0.3,0.2]})
df['weighted_return'] = df['Monthly Return'] * df['Total Weight']
rets = df.groupby(['Dates'])['weighted_return'].sum()
cumulative_rets = (rets + 1).cumprod() - 1
cumulative_rets
所以你的 return 系列是:
Dates
2018-07-31 0.00800
2018-08-31 0.01506
2018-09-30 0.01100
Name: weighted_return, dtype: float64
现在您可以考虑如何合并交易成本、滑点等。零美元投资组合方法的主要问题是它假设您可以购买部分股票。通常这种零美元方法用于学术论文。
您应该查看 pyfolio
来展示结果和计算风险指标。
假设我们有一个稳定的每月 return。然后我们需要额外的整数变量months
。
investment = 1000
months = 1
pf['P&L'] = investment * pf['Total Weight'] * (1+pf['Monthly Return'])**months