2016-10-18 9 views
1

私はYahoo finance APIから情報を取得するスクリプトを作成していますが、APIはかなり遅いですが、それを使用するためには機能します。スクリプトのテスト中、私はIndexOutOfBounds例外が発生していることを知りました。調査の結果、Yahoo!ファイナンスは株式の1日分欠けていることを除いて株価情報を返すことがわかりました。より広い期間を使用すると、より長い期間を使用するときに例外が発生するため、より多くの日数が失われますが、後で修正できるのは自分のコード内にあると思っています。Yahoo finance API特定の日にデータがありません

Yahoo!ファイナンスAPIに株価情報の全期間がないとAPIが役に立たなくなる他の誰かがこれを経験していて、そこに何か解決策がありますか?データを取得するために別の方法を使用する必要があると私は推測しています。

今、このPythonモジュールhttps://pypi.python.org/pypi/yahoo-financeを使用しています。

Yahoo financeは私が現在必要としている情報が含まれており、データを照会するために必要な証券取引所をサポートしている唯一のAPIです。

更新: はい、問題を再現できます。以下は再生成するコードです:

>>> import datetime as dt 
>>> import yahoo_finance as yf 
>>> 
>>> quote = yf.Share('GJF.OL') 
>>> date_from = str(dt.date.today() - dt.timedelta(days=5)) 
>>> date_to = str(dt.date.today()) 
>>> quote_his = quote.get_historical(date_from, date_to) 
>>> import pprint 
>>> pprint.pprint(quote_his) 
[{'Adj_Close': '156.50', 
    'Close': '156.50', 
    'Date': '2016-10-14', 
    'High': '156.50', 
    'Low': '153.10', 
    'Open': '153.50', 
    'Symbol': 'GJF.OL', 
    'Volume': '487600'}, 
{'Adj_Close': '153.60', 
    'Close': '153.60', 
    'Date': '2016-10-13', 
    'High': '153.60', 
    'Low': '152.50', 
    'Open': '153.30', 
    'Symbol': 'GJF.OL', 
    'Volume': '508800'}] 
>>> 

このコードは、月曜日(2016年10月17日)の株価情報をプリントアウトする必要がありますが、それはしていません。私が別の株式を選択した場合、私は月曜日の株価情報も辞書に入れます。

更新2: 別のモジュールystockquoteを試してみましたが、同じ結果が得られました。私は木曜日と金曜日の情報を取得しますが、月曜日は取得しません。私は別の見積もりを求める場合、私は3日間のすべての情報を取得します。私はyahooファイナンスサイトに行くとグラフなどの月曜日からの株価情報を持っています。

更新3: 株価の遅れに関連している可能性のあるデータがGJF.OLで見つかりました以下のようなAPIの歴史的な表があります。しかし、GJF.OL株の株価情報を受け取っていない日には、私はまだ他の株から株価情報を受け取ることができました。

私は現在、GJF.OL株の株価情報を受け取っていますが、株価情報の最後の165日間を株式から取得しようとしましたが、NAS.OL株から1日が欠落しています返されたデータにはその日のデータは含まれていませんが、他の株式にはその情報が含まれています。株式はNAS.OLであり、日付は2016年8月3日のデータがないところです。このデータが欠落している理由は何ですか?

+1

あなたは、どの日およびどのストックを例に挙げることができますか?それを再現するAPIリンクまたはコードスニペットが理想的です。市場が週末や休暇のために閉鎖された場合、それはそれを説明することができます。 –

+0

はい、回答を更新しました。 APIは実際には辞書に週末の日数が含まれないように巧妙であるため、空の辞書として表示されず、辞書からスキップされているだけです。 – exceed

答えて

0

これはおそらくPythonバインディングとは関係がなく、まったくYahooのデータです。あなたはバインディングを読んでいる場合は、実行するコマンドは、私は自分自身のためにそれを本質的

curl -G 'https://query.yahooapis.com/v1/public/yql' \ 
    --data-urlencode 'env=store://datatables.org/alltableswithkeys' \ 
    --data-urlencode 'format=json' \ 
    --data-urlencode 'q=select * from yahoo.finance.historicaldata where symbol = "GJF.OL" and startDate = "2016-10-13" and endDate = "2016-10-18"' 

暴言されたとき、私は13日、14日、17日、そして18日のデータを得ました。アクセスしているテーブルのデータはの履歴となっていますので、データが表示されるまでに24時間かかることは理にかなっていません。

エンドポイントとPythonバインディングとの間に相違がある場合は、何かにある可能性がありますが、それらのバインディングのcodeはかなり単純です。

+0

はい、それも遅れているかもしれないと思っていましたが、別の株価を試すと、私は17日の価格情報を得ましたので、17日に他の株式から株価情報を受け取ったときに、 。つまり、今私がしようとしているとき、私はその特定の見積もりについて17日と18日の株価情報を取得します。 APIが他の株式については価格情報を返すが、GJF.OLの引用は返さないというのは本当に意味をなさないので、修正されたどこかで問題が発生した可能性があります。うーん、大丈夫、その基本的にYQL – exceed

+0

まだ何か変わった。私が最後の165日を取得しようとすると、市場が開かれている117日が得られますが、NAS.OLの引用符の1つにつきましては116日しかかかりませんが、他の株式は117日です。 2016年8月3日にNAS.OL株に不足している株式情報を確認した後。なぜその行方不明の任意のアイデアですか? – exceed

+0

'curl'コマンド' startDate = "2016-08-01"とendDate = "2016-08-10" 'で、この日付範囲の2016-08-03を取り戻しました。 Yahooの終わりのバグのように感じる。何かが欠落しているときに範囲を切り替えてみてください。多分彼らはシンボルと時間範囲で結果をキャッシングしています。 –

関連する問題