如何解决财务回测程序的运行时警告
我正在尝试使用 bt
库通过使用其 web page 中提供的示例之一来回测交易策略(由于 bt.get()
,我没有检索所提供的数据}} 函数不起作用。但这是我正在使用的代码(我知道某些 df
处理很混乱,但它可以完成工作):
import bt,pandas as pd,yfinance as yf,datetime as dt,os,requests
from pandas_datareader import data as pdr
yf.pdr_override
ticks = ['AAPL','MSFT','C','GS','GE']
data = tdaph(ticks[0])
data = data.set_index('datetime')
data[ticks[0]] = data['close']
data = data.drop('close',axis=1)
for i in range(1,len(ticks)):
aa = tdaph(ticks[i])
aa = aa.set_index('datetime')
data[ticks[i]] = aa['close']
print('done')
data.index = pd.to_datetime(data.index)
data = data.astype('float')
sma = data.rolling(50).mean()
class SelectWhere(bt.Algo):
def __init__(self,signal):
self.signal = signal
def __call__(self,target):
if target.Now in self.signal.index:
sig = self.signal.loc[target.Now]
selected = list(sig.index[sig])
target.temp['selected'] = selected
print('hecho')
s = bt.Strategy('above50sma',[SelectWhere(data > sma),bt.algos.WeighEqually(),bt.algos.Rebalance()])
print('strat hecha')
t = bt.Backtest(strategy=s,data=data)
print('backtest hecho')
res = bt.run(t)
但是在运行 bt.run()
函数时,我收到以下 RuntimeWarning 消息:
Warning (from warnings module):
File "/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/ffn/core.py",line 2299
res = np.divide(er.mean(),std)
RuntimeWarning: invalid value encountered in true_divide
对可能是什么问题有任何想法吗?提前感谢任何人。
解决方法
当您尝试将无穷大除以无穷大之类的操作时,NumPy 会打印此警告:
>>> import numpy as np
>>> np.asarray([np.inf])/np.asarray([np.inf])
<stdin>:1: RuntimeWarning: invalid value encountered in true_divide
array([nan])
要做什么取决于具体情况。例如。在某些情况下,这种情况可能会作为某些优化算法的一部分发生,该算法随后会过滤掉任何给出 nan
的结果,因此您可能想要做的就是消除警告(关于如何执行此操作有很多问题)在 StackOverflow 上,例如 How to avoid "RuntimeWarning: invalid value encountered in divide" in NumPy?)。在其他情况下,它可能表明出现了更严重的错误。
如果您不知道警告是否表明出现问题,最好暂时“将警告转换为错误”(convert numpy warnings to errors),以便在发生这种情况时抛出异常并获得完整的回溯,包括它来自您自己脚本的哪一行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。