前提
このページでは接続後のみのサンプルを記載しています。接続方法は以下を参照してください。
IB証券 APIの接続方法
取得できる過去データ(ヒストリカルデータ)
過去データ(ヒストリカルデータ)は購読しているマーケット・データによって取得できないものがあります。
IB証券のマーケットデータの購読は以下を参照してください。
IB証券 マーケットデータの購読
ニュースの取得手順
ヘッドラインを取得後、ニュースの本文を取得します。
ニュース関連の関数
似たような関数が多いので、リストアップしてみました。
reqNewsProviders
:ニュースプロバイダーを取得newsTicks
:ニュースティックスを取得newsBulletins
:IBニュース速報のヘッドラインを取得reqHistoricalNews
:過去ニュースのヘッドラインを取得reqNewsBulletins
:IBニュース速報を購読cancelNewsBulletins
:IBニュース速報の購読を停止reqNewsArticle
:ニュースの本文を取得reqNewsProvidersAsync
:reqNewsProviders
と同じ?reqNewsArticleAsync
:reqNewsArticle
と同じ?reqHistoricalNewsAsync
:reqHistoricalNews
と同じ?
ドキュメント
ライブラリ ib_insync
IB証券の公式
私が利用しているライブラリのib_insyncと少し異なりますが参考になります。
ニュースのヘッドラインを取得
ヘッドラインニュースには以下の3種類があります。
- 過去のニュース
- ティック・ニュース
- IB速報ニュース
過去のニュース
ib.reqHistoricalNews(銘柄ID, ニュース社コード, 開始日時, 終了日時,
件数, オプション
)
- 銘柄ID:(必須)下記で別途説明します。
- ニュース社コード:(必須)下記で別途説明します。
- 開始日時、終了日時:(必須)必要に応じ、datetime形式の日時を指定します。不要な場合は
""
とします。
(注意)期間を指定してもその範囲で取得できません。たぶんバグです。 - 件数:(必須)最大300件まで指定できます。
- オプション:*詳細な情報が見つかりませんでした。
銘柄ID
- contractを以下のように設定します。
contract = Stock('TSLA', 'SMART', 'USD')
- 銘柄のIDは以下のように指定します。
contract.conId
ニュース社コード
公式サイトにあるように以下の3つからニュースを取得することができます。
カッコ内がコードになります。
- Briefing.com General Market Columns (BRFG)
- Briefing.com Analyst Actions (BRFUPDN)
- Dow Jones Newsletters (DJNL)
以下のように取得すればいいようなことがib_insyncに書いてありますがBLが含まれているためエラーになります。
newsProviders = ib.reqNewsProviders() codes = '+'.join(np.code for np in newsProviders)
ですので、以下のように設定し、ib.reqHistoricalNews
のニュース社コードにcodes
とします。。codes = 'BRFG+BRFUPDN+DJNL'
まとめ
テスラ(TSLA)のニュースのヘッドラインを10件取得します。
codes = 'BRFG+BRFUPDN+DJNL' contract = Stock('TSLA', 'SMART', 'USD') ib.qualifyContracts(contract) headlines = ib.reqHistoricalNews(contract.conId, codes,'', '', 10) df = util.df(headlines) df
詳細情報の取得はページ後半で。
ティック・ニュース
あまり理解できていませんが、以下のようにすれば取得はできます。
しかし、TWSに表示されているような最新ニュースを思ったように取得できず、更に、同じニュースを取得して蓄積するようです。
news = Contract('NEWS', symbol="BRFG:BRFG_ALL", exchange="BRFG") # news = Contract('NEWS', symbol="DJNL:DJNL_ALL", exchange="DJNL") ib.reqMktData(news, 'mdoff,292') ib.sleep(1) df = util.df(ib.newsTicks()) df["datetime"] = pd.to_datetime(df["timeStamp"],unit='ms') df
IB速報ニュース
なんのニュースを指しているのかもわかりませんが、以下で取得できると書いています。
しかし、ニュースのデータはいつも空です。
ib.reqNewsBulletins(True) ib.sleep(5) print(ib.newsBulletins())
力になれず、申し訳ないです。。。
ニュースの詳細データを取得
基本
ib.reqNewsArticle("ニュース社コード", "
記事コード
")
article = ib.reqNewsArticle("BRFG", "BRFG$0584b4cb") print(article)
ヘッドラインからの取得
ニュース履歴などで得たヘッドライン(headlines)の0番目からproviderCodeとarticleIdを取得できます。
latest = headlines[0] article = ib.reqNewsArticle(latest.providerCode, latest.articleId) print(article)
取得したニュースの詳細情報
article.articleType
:記事のタイプ*意味はわかりませんが。。。article=articleText
:記事の詳細情報。HTML形式になっています。
最後に
ニュースに関して、APIで取得できるのはとてもいいのですが、仕様なのか、不具合なのか、小難しいのかわかりませんが、あまりいい感じに取得できなかったです。
ご存知の方がいらっしゃいましたら、是非、教えて下さい。
コメント