OpenBB Terminal～フリーの金融分析プラットフォーム - 基礎編～

オープンソースの金融データ取得／投資分析プラットフォームのOpenBB Terminalのインストールと基本的な使い方を紹介します。

# はじめに

Bloomberg（略称：BB）といえば世界トップの金融データ企業で、BB Terminalといえば外資系金融マンにはおなじみの伝統的で風変わりなインターフェースを持つ金融データの統合ソフトウェアです。これのオープンソース版を目指しているというOpenBBが最近注目を集めているのでメモとして記事にしました。

Bloombergターミナル？？という方はYoutubeを検索してみてください。80年代風のIFに痺れること請け合いです。（**独自コマンドと引き数を入力して画面を呼び出す流れはOpenBBも踏襲しています**）
https://www.youtube.com/watch?v=2ee-x6IXWK8

ドキュメントや、「使ってみた」的な記事が乏しいなかで筆者が調べた範囲での紹介のため、網羅性の問題や勘違いもあるかもしれませんがご了承ください。

OpenBB Terminalはコマンドラインで操作するアプリケーションです。コマンドラインって何？というような方には理解しにくい内容が含まれているかもしれませんが、ご理解ください。

# OpenBB Terminal

BB TerminalのOSS版を目指しているというのは前出のとおりですが、公式ページによると

> 500以上の機能をナビゲート可能で、
> 最先端のデータサイエンスと機械学習テクノロジーによって加速された投資研究のための、Pythonベースの統合環境

とのことです。

## 良い点／いまいちな点

### 良い点
- 無料で使える（MIT License）
- 機械学習を含む米国の分析手法の勉強になりそう
- 定番の投資情報APIへアクセスするダッシュボード的に使えそう
- 仮想通貨関連にも強そう

### いまいちな点
- 基本英語
- 株価や企業分析は米国銘柄のみ？
- 利用の際はデータ取得のためのAPI（多くは無料）のキーを別途取得する必要がある
- ちょっと玄人向け感がある。GithubのREADME.mdでは、Installationの次の項目がContributingで恐れ入ります。TutorialはおろかSettingsやUsageすらない。

# 基本的な情報源

- 基本的な情報はOpenBB TerminalのメインWebサイトと、GithubのREADME.mdにまとまっています。

[メインWebサイト](https://openbb.co/products/terminal)

[GithubのREADME.md](https://github.com/OpenBB-finance/OpenBBTerminal)

- 各種コマンドの利用方法など、ドキュメントは次のGithubPagesにまとまっています。

[OpenBB Terminal(github pages)](https://openbb-finance.github.io/OpenBBTerminal/)

- 上記ページからリンクされている「出来ることの紹介」の動画も設定など参考になります。

[Gamestonk Terminal DEMO](https://www.youtube.com/watch?v=fqGPK8OVHLk)

- 改善要求やQ&A的な情報はDiscordに投稿されているようです。

[公式のDiscordコミュニティ](https://discord.com/invite/Y4HDyB6Ypu)

## （雑談）投資情報ターミナルって？

証券畑の人には「時価端末」という日本語で通じるのですが、要は株価を**リアルタイムで**表示したり企業情報を確認したりといった[Yahoo! ファイナンス](https://finance.yahoo.co.jp/)的な機能に加えて、[バフェットコード](https://www.buffett-code.com/)のように業績比較や様々な投資分析を行うための総合ソフトウェアをのことです。「端末」とか「Terminal」という単語について、昔は物理的な機器を指していましたが現在は業界でも100%ソフトウェアのことです。

その昔(1973年～)に使われていた株価端末を拝める資料へのリンクはこちら（開発元の日立が公開しているPDF資料への直リンクです）
[QUICK ビデオ-1の開発(PDF直リンク)](https://www.hitachihyoron.com/jp/pdf/1974/08/1974_08_05.pdf)

蛇足ですが、OpenBB Terminalのインストール方法紹介ページではラズパイ向けの項目があります。海外ではまだ専用機器で株価を表示するニーズがあるのでしょうか、だとしたら投資家のロマンを感じます。

# インストール

[インストールページ](https://github.com/OpenBB-finance/OpenBBTerminal#installation)に、WindowsとMacはインストール用[バイナリ](https://github.com/OpenBB-finance/OpenBBTerminal/releases)が用意されています。
Windowsの場合はこのインストーラを実行し、セキュリティ警告をスルーして道なりに進むとあっさりインストールできました。

[Windows/Mac用バイナリページ](https://github.com/OpenBB-finance/OpenBBTerminal/releases)

Python環境でのセットアップ手順やDockerコンテナとして起動する方法も公開されているので、用途に応じて選んでください。

# 使い方の基本

起動すると次のようなコンソール画面が表示されます。メニュー名を入力して目的のメニューに遷移し、コマンドを入力して処理を実行するのですが、メニューやコマンドには独特の考え方が含まれるので以降で説明します。

![SnapCrab_OpenBB Terminal_2022-4-10_18-13-57_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51434/40a2456d-30db-f631-73d9-d71d4f21406d.png)

### メニューについて

#### 【メニュー】
OpenBB Terminalには階層構造を持ったメニューの概念があります。

例えば、ターミナル起動時にはhomeメニューが表示されていますが、一つ下のstocksメニューに遷移したり、「..」と入力して一つ上のhomeメニューに戻ったりと、まるでCLIでディレクトリを移動するようにメニュー間を移動しながら、各メニューで提供されるコマンドを実行します。

#### 【サブメニュー】
ややこしいのですが更に細かいサブメニューを持つメニューが存在します。サブメニューでは所属するメニューの機能を継承しながらサブメニュー独自のコマンドが利用可能です。

### コマンドについて

#### 【メインコマンド】
どのメニューでも実行できる汎用的なコマンドです。

#### 【普通のコマンド】
現在表示しているメニューやサブメニューでのみ利用可能なコマンドです。

### メインコマンド

どのメニュー階層でも利用可能なコマンドです

| コマンド /省略形/ | 概要 | 日本語 |
|:---|:---|:---|
|cls|clear the screen|画面表示をリセットする|
|help / h / ?|help menu|ヘルプを表示|
|quit / q / ..|quit this menu and go one menu above|一つ上の階層のメニューに移動する|
|exit|exit the terminal|OpenBB Terminalを終了する|
|reset / r|reset the terminal and reload configs from the current location|リセットする（設定変更時などに利用？）|
|resources|only available on main contexts (not sub-menus)|リソースについて表示（サブメニューでは利用不可）|

ユニークな点としてquitとexitの意味が明らかに違います。
### HOMEメニューコマンド

起動直後に表示されるHOMEメニューで利用可能なコマンドです。

| コマンド /省略形/ | 概要 | 日本語 |
|:---|:---|:---|
|about|about us|「私たちについて」を表示|
|update|update terminal automatically|OpenBB Terminalをアップデート|
|tz|set different timezone|タイムゾーンを設定|
|export|select export folder to output data|データ出力フォルダを設定|
|exe|execute automated routine script|スクリプトを実行|

(HOMEメニュー以外のメニューにも、それぞれ専用のコマンドが用意されていますが、それらの説明は各メニューに移動してhelpコマンドで表示させるか、[ドキュメント](https://openbb-finance.github.io/OpenBBTerminal/terminal/)を参照してください。)

### HOMEメニューのサブメニュー

HOMEメニューで、次のサブメニュー名を入力することでサブメニューに遷移できます。

| サブメニュー | 概要 | 日本語 |
|:---|:---|:---|
|settings|set feature flags and style charts|各種設定を行うサブメニュー|
|keys|set API keys and check their validity|利用するAPIのキーを設定するサブメニュー|

### メニュー

OpenBB Terminalの中心的な機能は次表のそれぞれのメニューへ遷移して実行します。

| メニュー | 概要 | DeepL翻訳 |
|:---|:---|:---|
|stocks|The most advanced and extensive menu containing a multitude of data sources as well as a large variety of fundamental, technical and quantitative techniques.|ファンダメンタルズ、テクニカル、クオンツの各技術に加え、多数のデータソースを含む最も高度で豊富なメニューです。|
|crypto|Given our open source nature and the decentralisation associated with digital assets, we are investing a lot of resources on this industry.|私たちのオープンソースとしての性格や、デジタル資産に関連する非中央集権性を考慮し、この業界に多くのリソースを投入しています。|
|etf|To encapsulate industries, sectors or entire markets, Exchange Traded Funds (ETFs) offer a wide-variety of options next to allowing for a passively investing style. The terminal provides a variety of options to find and analyse the ETF that meets your needs.|ETF（上場投資信託）は、産業、セクター、市場全体を包含するため、パッシブな投資スタイルに加え、多様なオプションを提供します。この端末では、お客様のニーズに合ったETFを探し、分析するための様々なオプションが提供されています。|
|economy|As we saw from COVID, and multiple times in history, the overall economy has a big effect on the way we invest. This menu gives you an insight into interest and inflation rates, commodities, futures, economic impact events and even a fear-greed index.|COVIDで見たように、また歴史上何度もあったように、経済全体が投資のあり方に大きな影響を与えます。このメニューでは、金利やインフレ率、コモディティ、先物、経済への影響イベント、さらには恐怖グリード指数について知ることができます。|
|forex|Fully started by an open source contributor, which shows the power of the community. This menu will help to understand better the currency fluctuations during economic events.|オープンソースの貢献者によって完全に開始され、コミュニティの力を示しています。このメニューは、経済イベント時の通貨の変動をよりよく理解するのに役立ちます。
|funds|Get a good overview of the available mutual funds within the market. This will help you building your decision in terms of selecting a mutual fund to go with.|市場内で利用可能な投資信託の概要をよく理解すること。これは、あなたが一緒に行くために投資信託を選択するという点で、あなたの決定を構築するのに役立ちます。|
|alternative|An initial start to a menu that will expand greatly over time. Alternative data is crucial to making better informed decisions.|これから大きく広がっていくメニューの最初の一歩。より良い情報を得るためには、代替データが重要です。|
|econometrics|Much of the Financial theory comes from Econometrics, the application of statistical methods to economic data. With this menu we provide the user the ability to use custom data to perform these advanced techniques including a variety of statistical tests and multi-linear regression models.|金融理論の多くは、経済データへの統計的手法の応用である計量経済学に由来しています。このメニューでは、カスタムデータを使って、様々な統計テストや多重回帰モデルなど、これらの高度な技術を実行する機能を提供します。
|portfolio|As an investor, you must be frustrated over the affordable existing tools to help you manage your portfolio. We are too. This menu will help every investor track, assess and optimize their portfolio. Plus, we allow an unparalleled level of customization.|投資家として、ポートフォリオを管理するための手頃な既存ツールに不満を持っているはずです。私たちも同じです。このメニューは、すべての投資家がポートフォリオを追跡し、評価し、最適化するのに役立ちます。さらに、比類ないレベルのカスタマイズを可能にします。|
|jupyter|This menu gives you the ability to create a large range of different automatic reports to perform due diligence in an instant. It streamlines and saves you something more important than money: time.|このメニューを使えば、さまざまな自動レポートを大量に作成し、瞬時にデューデリジェンスを実行することが可能です。お金よりも大切なもの、それは時間を合理化し、節約することです。|

# とりあえず動かしてみる(簡易チュートリアル)

インストール直後の全く設定を行わない状態でも株価検索や一部のチャート表示は可能なので、とりあえず動かしてみます。

### 目標
適当な企業のティッカーコードを調べて、株価のろうそく足チャートを表示する。

### 手順
起動後に表示されるコンソールで「stocks」と入力後にエンターキーを押し、stocks(株式)メニューに移行します。

```sh
2022 Apr 10, 07:00 (🦋) / $ stocks
```

(私の環境の場合、蝶のマークが文字化けしました。Windows用インストーラを用いた場合、変更できるフォントが限定的なので直すのは難しそうです)

stocksメニューに移動すると次のように表示されます。

![SnapCrab_NoName_2022-4-10_20-6-12_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51434/b85dd6da-f897-1751-2cf2-e47dab5d8c99.png)

この画面で「search Apple」と入力して「アップル社」を検索します。

```sh
2022 Apr 10, 07:08 (🦋) /stocks/ $ search Apple
               Search Results
┌─────────────────────────────────┬────────┐
│ Company                         │ Ticker │
├─────────────────────────────────┼────────┤
│ Apple Inc.                      │ AAPL   │
├─────────────────────────────────┼────────┤
│ APPLE GREEN HOLDING INC         │ AGPL   │
├─────────────────────────────────┼────────┤
│ Apple Hospitality REIT, Inc.    │ APLE   │
├─────────────────────────────────┼────────┤
│ APPLE RUSH COMPANY INC          │ APRU   │
├─────────────────────────────────┼────────┤
│ GOLDEN APPLE OIL & GAS INC      │ GAPJ   │
├─────────────────────────────────┼────────┤
│ Maui Land & Pineapple Company,  │ MLP    │
├─────────────────────────────────┼────────┤
│ PINEAPPLE EXPRESS INC           │ PNPL   │
└─────────────────────────────────┴────────┘
```

するとAppleを社名に含む企業などがリスト表示されます。調べたいApple社は一番上のApple Inc.なので、米国の取引所での識別コードであるティッカーコードは「AAPL」ということが分かります。

続いて、ろうそく足を表示するため、アップル社（AAPL）の過去1年分のデータを取得します。
次のように「load AAPL -r 1y」と入力します。

```sh
2022 Apr 10, 09:30 (🦋) /stocks/ $ load -t AAPL -r 1y

Loading Daily AAPL stock with starting period 2019-04-05 for analysis.

Datetime: 2022 Apr 10 09:30
Timezone: America/New_York
Currency: USD
Market:   CLOSED

2022 Apr 10, 09:30 (🦋) /stocks/ $
```

なぜ範囲として-r 1yと指定しているのに2019-04-05からのデータが取得されているのか不明ですが、とりあえずデータが取得できたのでろうそく足のチャートを表示してみます。

「candle」と入力します。

```sh
2022 Apr 10, 09:32 (🦋) /stocks/ $ candle
```

次のようにチャートが表示されました。

![SnapCrab_Figure 1_2022-4-10_22-36-52_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51434/b5ce362a-2bde-db51-506c-339aa60df4b5.png)

細かすぎてろうそく足なのかわかりづらいですが、とにかく取得した範囲のチャートが表示されました。

# 簡易設定

タイムゾーンの設定とAPIキーの設定を行います。

### タイムゾーンの設定

起動直後のHOMEメニューで「tz Asia-Tokyo」と入力して日本時間に設定します。
「Timezone successfully updated」と表示されて正しい時刻が表示されれば成功です。

```sh
2022 Apr 10, 10:22 (🦋) / $ tz Asia-Tokyo
Timezone successfully updated
2022 Apr 10, 23:22 (🦋) / $
```

### APIキーの設定

HOMEメニューで「keys」と入力し、APIキー設定用サブメニューに移動します。

```sh

2022 Apr 10, 23:22 (🦋) / $ keys
┌──────────────────────────────────────────────────────── Keys ────────────────────────────────────────────────────────┐
│                                                                                                                      │
│ Set API keys through environment variables:                                                                          │
│    av                     ALPHA_VANTAGE              not defined                                                     │
│    fmp                    FINANCIAL_MODELING_PREP    not defined                                                     │
│    quandl                 QUANDL                     not defined                                                     │
│    polygon                POLYGON                    not defined                                                     │
│    fred                   FRED                       not defined                                                     │
│    news                   NEWSAPI                    not defined                                                     │
│    tradier                TRADIER                    not defined                                                     │
│    cmc                    COINMARKETCAP              not defined                                                     │
│    finnhub                FINNHUB                    not defined                                                     │
│    iex                    IEXCLOUD                   not defined                                                     │
│    reddit                 REDDIT                     not defined                                                     │
│    twitter                TWITTER                    not defined                                                     │
│    rh                     ROBINHOOD                  not defined                                                     │
│    degiro                 DEGIRO                     not defined                                                     │
│    oanda                  OANDA                      not defined                                                     │
│    binance                BINANCE                    not defined                                                     │
│    bitquery               BITQUERY                   not defined                                                     │
│    si                     SENTIMENT_INVESTOR         not defined                                                     │
│    cb                     COINBASE                   not defined                                                     │
│    wa                     WHALE_ALERT                not defined                                                     │
│    glassnode              GLASSNODE                  not defined                                                     │
│    coinglass              COINGLASS                  not defined                                                     │
│    cpanic                 CRYPTO_PANIC               not defined                                                     │
│    ethplorer              ETHPLORER                  defined, test passed                                            │
│    smartstake             SMARTSTAKE                 not defined                                                     │
│                                                                                                                      │
└──────────────────────────────────────────────────────────────────────────────────────────────────── OpenBB Terminal ─┘
2022 Apr 10, 23:32 (🦋) /keys/ $
```

Twitter APIなど、準備するのに手間がかかりそうなものも混ざっていますが、今回は無料で取得できるAlpha VantageのAPIキーを設定します。

#### Alpha VantageのAPIキーを取得

[Alpha Vantageのサイト](https://www.alphavantage.co/)で「GET YOUR FREE API KEY TODAY」[ボタン](https://www.alphavantage.co/support/#api-key)を押し、必要事項を入力するとAPIキーが表示されます。

親切なことに、次のように入力したいキーに対応するコマンドを引き数なしで実行すると、APIキー取得用のURLが表示されます。

```sh
2022 Apr 10, 23:49 (🦋) /keys/ $ av
For your API Key, visit: https://www.alphavantage.co/support/#api-key
```

#### キーを設定

次のコマンドでAPIキーを設定します。

```sh
2022 Apr 10, 23:34 (🦋) /keys/ $ av <APIキー>
defined, test passed
```

# 最後に

今回はOpenBB Terminalのインストール方法と簡単な利用方法を紹介しました。
お気づきの点など、ご指摘いただけると有難いです。