python - 如何在 Python 中比较和排名 ETF?
问题描述
希望你一切都好?
所以我最近开始尝试交易算法。我正在尝试创建一个 ETF 轮换策略。我正在为如何比较etfs之间的回报而苦苦挣扎?(底部错误)我犯了一个简单的错误吗?你能给我一些关于我需要做什么来对它们进行排名的指示,因为我不想写数百个 if 语句,有什么捷径吗?
感谢您的任何建议!(这不是完整的代码)
import pandas as pd
import numpy as np
import yfinance as yf
import datetime as dt
from pandas_datareader import data as pdr
yf.pdr_override()
now = dt.datetime.now()
start = dt.datetime(2018,1,1)
emasUsed = [60]
etfs = ['FDN','IBB','IEZ','IGV','IHE','IHF','IHI','ITA','ITB','IYJ','IYT','IYW','IYZ'
,'KBE','KCE','KIE','PBJ','PBS','SMH','VNQ','XLB','XLP','XLU','XOP','XRT']
monthly_return = []
top_etfs = [None,None,None,None,None,None]
total = 0
##for etf in etfs:
## df = pdr.get_data_yahoo(etf, start, now)
## monthly_returns = df['Adj Close'].resample('M').ffill().pct_change()
## #print("ETF: ",etf," Monthly Returns: ",monthly_returns)
## monthly_return.append(str(monthly_returns))
## for i in range(30):
## daily_returns = df['Adj Close'].resample('D').ffill().pct_change()
## cumulative_returns = (daily_returns + 1).comprod()
## print(cumulative_returns)
df = pdr.get_data_yahoo(etfs, start, now)
daily_return = (df['Adj Close'].pct_change())
monthly_return = (df['Adj Close'].resample('M').ffill().pct_change())
print(monthly_return)
print(daily_return)
for i in df.index:
print(daily_return['FDN'])
if daily_return['FDN'] > daily_return['IBB']:
print("FDN is better than IBB")
else:
print("IBB is better than FDN")
if daily_return['FDN'] > daily_return['IBB']:文件“C:\Python\Python37\lib\site-packages\pandas\core\generic.py”,第1479行,非零 f“的真值a {type(self) .name } 不明确。" ValueError: Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
解决方案
发生错误是因为您尝试对系列本身而不是系列成员进行数字比较。另请注意,第一个数据点是 [2018-01-01 00:00:00 NaN]
所以在你的代码中应该是
for i in df.index[1:]:
if daily_return['FDN'][i] > daily_return['IBB'][i]:
...
推荐阅读
- android - startLockTask() 在 Kiosk 模式下无法使用 Android 管理 API
- python - 卷曲命令行将 xml 文件导入 Xray
- firebase - Firebase http函数api突然停止工作
- testng - QAF 和 Spring 引导环境中 Cucumber 标记为 TestNG 组
- android - 是否可以仅使自定义按钮的一个实例透明?
- ruby-on-rails - 链接未正确关闭的引导模式
- reactjs - ReactJS 中的类别和子类别
- python - 无法在 Django Web 项目中显示 JsonResponse
- visual-studio-2017 - Office JS Addin Project will not start in VS 2019 but works fine in VS 2017
- postgresql - 如何使用 PostgreSQL pgrouting 函数找到具有 MOST K 边的两个几何点之间的最短路径?