微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

财务回测程序的运行时警告

如何解决财务回测程序的运行时警告

我正在尝试使用 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 举报,一经查实,本站将立刻删除。