既然旧的 API 已经正式失效,我已经尝试让一些代码适用于新的雅虎财务历史数据。代码如下:
Private Function DownloadData(ByVal StockSymbol As String)
Try
'https://query1.finance.yahoo.com/v7/finance/download/CPG.TO?period1=1492824351&period2=1495416351&interval=1d&events=history&crumb=M3Ig5MvcK77
Dim Period1 As Integer = (New DateTime(2007, 1, 1, 0, 0, 0) - New DateTime(1980, 1, 1, 0, 0, 0)).TotalSeconds
Dim Period2 As Integer = (DateTime.UtcNow - New DateTime(1980, 1, 1, 0, 0, 0)).TotalSeconds
Dim csvData As String = String.Empty
Using Web As New WebClient
Dim strm As Stream = Web.OpenRead("https://finance.yahoo.com/quote/" & StockSymbol & "/history?p=" & StockSymbol)
Dim Crumb As String = ScrapeCrumb(strm)
Dim s As String = "https://query1.finance.yahoo.com/v7/finance/download/" …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Python 3.8 中的backtrader包对使用的模块AAPL从雅虎财经获得的历史股票价格进行回测。backtraderYahooFinanceData
问题:数据似乎是从雅虎财经下载的,但在回测过程中,我们得到一个错误:
FileNotFoundError:[Errno 2]没有这样的文件或目录:'AAPL'
知道我们如何解决这个问题吗?
系统:
重现错误的 Python 代码
from datetime import datetime
import backtrader as bt
class SmaSignal(bt.Signal):
param = (('period', 20), )
def __init__(self):
self.lines.signal = self.data - bt.ind.SMA(period=self.p.period)
data = bt.feeds.YahooFinanceData(dataname='AAPL',
fromdate=datetime(2018, 1, 1),
todate=datetime(2018, 12, 31))
cerebro = bt.Cerebro(stdstats=False)
cerebro.adddata(data)
cerebro.broker.setcash(1000.0)
cerebro.add_signal(bt.SIGNAL_LONG, SmaSignal)
cerebro.addobserver(bt.observers.BuySell)
cerebro.addobserver(bt.observers.Value)
print(f'Starting Portfolio Value: {cerebro.broker.getvalue():.2f}')
cerebro.run()
print(f'Final Portfolio Value: {cerebro.broker.getvalue():.2f}')
cerebro.plot(iplot=True, volume=False)
Run Code Online (Sandbox Code Playgroud)
错误堆栈
Traceback …Run Code Online (Sandbox Code Playgroud) 我正在尝试从 Devon 的 yFinance API 获取收盘价DVN。问题是 API 给出的adjusted closing share price响应closing share price数据有时可能不同。
雅虎财经显示,天地网络2021年9月9日收盘股价为28.45,调整后收盘股价为27.96
在 yFinance 的 API 响应中,我得到的收盘股价为 27.96,这应该是调整后的值,而不是收盘值。
现在我如何从 yFinance 获取收盘价而不是调整后的股价?
大家好,希望你们一切顺利。我使用了一个代码,通过从雅虎财经导入股票数据来绘制砖形图并计算柱形,效果很好,但我想在代码中使用雅虎财经的外汇数据,但它不起作用。
Stocklist=['AAPL']
start='2016-1-1'
for stock in StockList:
data[stock]=pdr.get_data_yahoo(stock, start)
Run Code Online (Sandbox Code Playgroud)
这就是我获取股票数据并使用它的方式,但它不适用于外汇,例如 EURUSD=X
任何人都可以透露雅虎为此次通话返回的内容吗?
该参考是t7股票趋势.
当提交此功能的符号时,雅虎会回复类似于以下内容的内容:
AAPL nbsp;==+-+==nbsp;
Run Code Online (Sandbox Code Playgroud)
我已经搜索了这个互联网以找到这个输出的解释,但空手而归.
有人有这个电话的经验吗?
以下是我使用YQL查询,使用雅虎融资获取数据,我使用的是印度NSE交易股票的符号,BSE
http://query.yahooapis.com/v1/public/yql?q=select * from yahoo.finance.quotes where
symbol in ("AIAENG.NS","ATULAUTO.NS")&env=http://datatables.org/alltables.env&format=json
Run Code Online (Sandbox Code Playgroud)
奇怪的是,这个查询总是返回所有字段的空数据(无效数据),即使我使用的符号是正确的,并且可以在Yahoo财务上用于查询详细信息.实际上同样是另一个印度交换BSE,各自的符号AIAENG.BO,ATULAUTO.BO
但是,如果我用"YHOO","AAPL","GOOG","MSFT"等美国纳斯达克代码替换它,它的工作没有问题.
我正在尝试使用Yahoo Finance API将数据读入DataFrame.但是,当我从列表中读取符号的值时,它们最终会出现在DataTable中的单个列中.我正在使用API,因为我实际上想要分红,P/E等数据,我认为你不能用datareader访问这些数据.我有两个问题:
我将如何完成我想要为股票代码列表做的事情
import urllib2
from pandas import DataFrame
def get_data2(symbol):
columns = ['last','date','change','high','low','vol']
url = "http://download.finance.yahoo.com/d/quotes.csv?s=%s&f=sl1d1c1hgv" % symbol
file =urllib2.urlopen(url)
s = file.read()
file.close()
s= s.strip()
L = s.split(',')
L[0] = L[0].replace('"','')
L[2] = L[2].replace('"','')
D = DataFrame(L, columns=columns)
return D
Run Code Online (Sandbox Code Playgroud)使用此代码,我得到一个ValueError,因为形状不匹配,但实质上我想从列表中读取每个值到DataTable中的一列,并最终迭代一个符号列表.
谢谢你的帮助
这可能是一个非常简单的问题,但我真的被卡住了.我想把Pandas的DataReader称为;
from pandas.io.date import DataReader
Run Code Online (Sandbox Code Playgroud)
但它确实得到了DataReader,我不知道我做错了什么,特别是对于这么简单的事情.我所要做的就是从雅虎财务中获取数据.
非常感谢您的帮助.
我一直在与盈透证券TWS和R合作,并且取得了不同的成功。
library(IBrokers)
IBConn <- twsConnect(port = xxxx)
currency_df = twsCurrency("NZD",currency = "USD")
test = reqHistoricalData(IBConn, Contract = currency_df, whatToShow ='BID_ASK', useRTH = "0", barSize = '1 min', duration="1 D", endDateTime = paste0(gsub("-","", reqCurrentTime(IBConn))," EST"))
plot(test$NZD.USD.Close)
library(quantmod)
plot(test$NZD.USD.Close)
chartSeries(test$NZD.USD.Close)
addBBands(n = 20, sd = 2, ma = "SMA", draw = 'bands', on = -1)
Run Code Online (Sandbox Code Playgroud)
效果很好,我可以下载当天的1分钟货币数据。
当我尝试获取公司的股票数据时就会出现问题
tws = twsConnect(port=7497)
symbol = twsSTK("AAPL")
data_AAPL = reqHistoricalData(tws, symbol)
print (data_AAPL)
Run Code Online (Sandbox Code Playgroud)
但是,我没有得到与该博客相同的结果(reqHistoricalData函数 -大约在页面的一半)。
我使用以下代码请求的其他数据运行了几个小时,并且我不得不在R控制台中单击“停止”。
tws <- twsConnect()
aapl.csv <- file("AAPL.csv", open="w") …Run Code Online (Sandbox Code Playgroud) 我yahoo_fin.options.get_expiration_dates()从一个非常简单的代码中调用,这样我就不太可能加载了同名的其他模块。
我的整个代码是这样的:
import matplotlib.pyplot as plt
import pandas as pd
from numpy import *
from yahoo_fin import options
plt.style.use("seaborn")
expirationDates = options.get_expiration_dates("goog")
Run Code Online (Sandbox Code Playgroud)
最后一行的输出是:
NameError: name 'HTMLSession' is not defined
Run Code Online (Sandbox Code Playgroud)
你能帮我理解发生了什么吗?
yahoo-finance ×10
python ×4
api ×3
pandas ×3
python-3.x ×2
algorithm ×1
back-testing ×1
backtrader ×1
cookies ×1
csv ×1
dataframe ×1
finance ×1
python-2.7 ×1
quantmod ×1
r ×1
stockquotes ×1
yahoo ×1
yahoo-api ×1
yfinance ×1