【问题标题】:How to compare and rank ETF's in Python?如何在 Python 中比较和排名 ETF?
【发布时间】:2020-11-21 10:29:38
【问题描述】:

希望你一切都好?

所以我最近开始尝试交易算法。我正在尝试创建一个 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")

如果 daily_return['FDN'] > daily_return['IBB']: 文件“C:\Python\Python37\lib\site-packages\pandas\core\generic.py”,第 1479 行,在 nonzero f"{type(self).name} 的真值不明确。" ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

【问题讨论】:

标签: python algorithm algorithmic-trading trading


【解决方案1】:

发生错误是因为您尝试对系列本身而不是系列成员进行数字比较。另请注意,第一个数据点是 [2018-01-01 00:00:00 NaN]

所以在你的代码中应该是

for i in df.index[1:]:
    if daily_return['FDN'][i] > daily_return['IBB'][i]:
       ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多