无法正确计算总数 return (pandas_datareader.get_data_yahoo)
Can't calculate the total return correctly (pandas_datareader.get_data_yahoo)
我正在尝试获得一个基准,其中有一个起始余额,假设我们只是持有并且从不交易,最终的总余额将是多少。但是我计算的时候,基线Return不正确。
这是我目前所掌握的信息,我正在使用 pandas_datareader 获取股票信息
import matplotlib.pyplot as plt
import pandas_datareader as pdr
from datetime import datetime
import numpy as np
# defining variables
period = 30
start_balance = 10_000
# defining date range
start_date = datetime(2012, 1, 1)
end_date = datetime(2021, 12, 31)
years = (end_date - start_date).days / 365.25 # .25 to account for leap years
stock = pdr.get_data_yahoo('^GSPC', start_date, end_date)
# will only be using the open and close prices
stock.drop(['High', 'Low', 'Volume', 'Adj Close'], axis = 1, inplace = True)
# get the daily return %
stock['Return'] = stock['Close'] / stock['Open']
# get the baseline (What is giving me the issue)
stock['Baseline'] = stock['Return'].cumprod() * start_balance
当我检查基线时,它几乎是应该的一半
print(stock['Close'][-1]/ stock['Open'][0])
print(stock['Baseline'][-1] / stock['Baseline'][0])
3.7861082497194447
1.9666766862422043
有什么我遗漏的吗?我什至做了一个快速循环,我将每天的 return 乘以前一天的余额,但我仍然得到相同的答案。
balance = 10_000
for i in stock['Return']:
balance *= i
print(balance)
19951.10078477877
我想我可能得到了一些东西。而不是通过
获得每日 Return
stock['Return'] = stock['Close'] / stock['Open']
我得到了前一天的收盘价,并用它来计算每日 Return
stock['Return'] = stock['Close'] / stock['Close'].shift(1)
因为(我假设)价格可能会在市场之外发生变化,所以这是考虑到这一点。百分比变化现在更接近应有的水平了!
print(stock['Close'][-1]/ stock['Open'][1])
print(stock['Baseline'][-1] / stock['Baseline'][1])
3.732
3.731
我正在尝试获得一个基准,其中有一个起始余额,假设我们只是持有并且从不交易,最终的总余额将是多少。但是我计算的时候,基线Return不正确。
这是我目前所掌握的信息,我正在使用 pandas_datareader 获取股票信息
import matplotlib.pyplot as plt
import pandas_datareader as pdr
from datetime import datetime
import numpy as np
# defining variables
period = 30
start_balance = 10_000
# defining date range
start_date = datetime(2012, 1, 1)
end_date = datetime(2021, 12, 31)
years = (end_date - start_date).days / 365.25 # .25 to account for leap years
stock = pdr.get_data_yahoo('^GSPC', start_date, end_date)
# will only be using the open and close prices
stock.drop(['High', 'Low', 'Volume', 'Adj Close'], axis = 1, inplace = True)
# get the daily return %
stock['Return'] = stock['Close'] / stock['Open']
# get the baseline (What is giving me the issue)
stock['Baseline'] = stock['Return'].cumprod() * start_balance
当我检查基线时,它几乎是应该的一半
print(stock['Close'][-1]/ stock['Open'][0])
print(stock['Baseline'][-1] / stock['Baseline'][0])
3.7861082497194447
1.9666766862422043
有什么我遗漏的吗?我什至做了一个快速循环,我将每天的 return 乘以前一天的余额,但我仍然得到相同的答案。
balance = 10_000
for i in stock['Return']:
balance *= i
print(balance)
19951.10078477877
我想我可能得到了一些东西。而不是通过
获得每日 Return
stock['Return'] = stock['Close'] / stock['Open']
我得到了前一天的收盘价,并用它来计算每日 Return
stock['Return'] = stock['Close'] / stock['Close'].shift(1)
因为(我假设)价格可能会在市场之外发生变化,所以这是考虑到这一点。百分比变化现在更接近应有的水平了!
print(stock['Close'][-1]/ stock['Open'][1])
print(stock['Baseline'][-1] / stock['Baseline'][1])
3.732
3.731