python - 使用来自 yahoo-> ValueError 的不同股票代码时出错:无法将浮点 NaN 转换为整数
问题描述
ValueError:无法将浮点 NaN 转换为整数。
当我使用 AAPL 美国股票代码时,它可以工作,但是当我更改为 0200.KL (REVENUE.KL) 的大马交易所股票代码时,结果是错误的,为什么?
import datetime
import dateutil
import pandas_datareader.data as wb
from stocktrends import Renko
year=5
tickers ="AAPL"
#tickers="0200.KL" #if I replace AAPL stock tickers with this tickers, error occurs
ohlc = wb.get_data_yahoo(tickers,start=datetime.date.today()-dateutil.relativedelta.relativedelta(years=year),end=datetime.date.today())
def ATR(DF,n):
"function to calculate True Range and Average True Range"
df = DF.copy()
df['H-L']=abs(df['High']-df['Low'])
df['H-PC']=abs(df['High']-df['Adj Close'].shift(1))
df['L-PC']=abs(df['Low']-df['Adj Close'].shift(1))
df['True Range']=df[['H-L','H-PC','L-PC']].max(axis=1,skipna=False)
df['Average True Range'] = df['True Range'].rolling(n).mean()
#df2 = df.drop(['H-L','H-PC','L-PC'],axis=1)
return df["Average True Range"]
def renko_DF(DF):
"function to convert ohlc data into renko bricks"
df = DF.copy()
df.reset_index(inplace=True)
df = df.iloc[:,[0,1,2,3,5,6]]
df.rename(columns = {"Date" : "date", "High" : "high","Low" : "low", "Open" : "open","Adj Close" : "close", "Volume" : "volume"}, inplace = True)
#df.fillna(method="bfill")
df2 = Renko(df)
df2.brick_size = round(ATR(DF,120)[-1],0)
#renko_df = df2.get_bricks() #i get_bricks() does not work try using get_ohlc_data() instead
renko_df = df2.get_ohlc_data()
return renko_df
renko_DF(ohlc)
解决方案
解决了。代码如下:
import datetime
import dateutil
import pandas_datareader.data as wb
from stocktrends import Renko
year=5
tickers ="AAPL"
#tickers="0200.KL" #if I replace AAPL stock tickers with this tickers, error occurs
ohlc = wb.get_data_yahoo(tickers,start=datetime.date.today()-dateutil.relativedelta.relativedelta(years=year),end=datetime.date.today())
def ATR(DF,n):
"function to calculate True Range and Average True Range"
df = DF.copy()
df['H-L']=abs(df['High']-df['Low'])
df['H-PC']=abs(df['High']-df['Adj Close'].shift(1))
df['L-PC']=abs(df['Low']-df['Adj Close'].shift(1))
df['True Range']=df[['H-L','H-PC','L-PC']].max(axis=1,skipna=False)
df['Average True Range'] = df['True Range'].rolling(n).mean()
#df2 = df.drop(['H-L','H-PC','L-PC'],axis=1)
return df["Average True Range"]
def renko_DF(DF):
"function to convert ohlc data into renko bricks"
df = DF.copy()
df.reset_index(inplace=True)
df = df.iloc[:,[0,1,2,3,5,6]]
df.rename(columns = {"Date" : "date", "High" : "high","Low" : "low", "Open" : "open","Adj Close" : "close", "Volume" : "volume"}, inplace = True)
#df.fillna(method="bfill")
df2 = Renko(df)
df2.brick_size = round(ATR(DF,120)[-1],2)
renko_df = df2.get_ohlc_data()
return renko_df
renko_DF(ohlc)
推荐阅读
- python - 在用户登录之前阻止我的侧栏上的按钮?
- javascript - 如何检测数组中的元素是否为一个字符长并且匹配另一个数组中任何元素的第一个字符
- bash - /bin/bash 的进程数应该是 1 时是 2
- r - R loop and filter
- python-3.x - 如何根据组 id 生成训练测试拆分?
- ios - 使用 curveEaseOut 动画 UIView 子类
- javascript - 添加和更新时VueJS DOM不更新-适用于删除
- android - RelativeLayout 与 ToolBar 内的父宽度不匹配
- html - 如何在图像上创建颜色叠加?
- javascript - 需要帮助 动作脚本 3 键盘输入