Pythonコード集

【Python】Plotlyでチャートに移動平均線を描画してみよう 後編

目安:この記事は3分で読めます

 

前編(前回の記事)では、可視化ライブラリのPythonを使って、移動平均線をチャート上に描画しました。

【Python】Plotlyでチャートに移動平均線を描画してみよう 前編

続きを見る

 

今回は、前編で紹介したコードを詳しく解説していきます。

最後までお読みいただければ、Yahoo!finance USから価格データを取得するために、新しく使ったライブラリや移動平均線の設定方法について理解することができるでしょう!

 

今回のテーマ

コードの意味を理解して、自分でチャートを作ってみよう!

 


▼ Pythonを効率的に学ぶなら ▼

Pythonを学ぼう

 


 

 

この記事の対象となる人

こんな人におすすめ

  • Pythonに興味がある人
  • Pythonを学びたいと思っている人
  • Pythonを使って株価の分析をしたい人

 

結論からいいます

結論

  • Pythonと可視化ライブラリのPlotlyを使えば "テクニカルチャート"だって爆速でつくれる

 

前回作ったチャートについて

まずは、前回作ったチャートについて復習しましょう。

チャートサマリー

・銘柄:ウェルズ・ファーゴ(WFC)
・期間:2019年以降
・テクニカル:移動平均線

ウェルズ・ファーゴのテクニカルチャート

日足(2019年以降)

Pythonコードの解説

さて、ここからがPythonコードの解説となります。

まずは、いつも通りライブラリからみてみましょう!

なお、コードの一覧画面は左右にスクロール(スワイプ)することができます。

 

コードの解説①:ライブラリ

import pandas as pd
import yfinance as yf
import plotly.graph_objs as go
import datetime

・今回使ったライブラリ

ライブラリ

・1行目:Pythonのエクセル版である”Pandas” をインポート

・2行目:価格データを取得するためのライブラリ ”yfinance ”をインポート

・3行目:可視化ライブラリの ”Plotly" をインポート

・4行目:日付の設定を行うモジュール ”datetime” をインポート

なお、『~ as pd、~ as yf、~as go』"pd、yf、go"という短いかたちで" ライブラリをインポートして、という意味です。

こうやってインポートする方が、その後シンプルに、かつ素早くコードを書くことができます。

 

コードの解説②:価格データの取得

価格データを取得するコードの解説です。

『Pythonとチャート』シリーズ第1弾では、『pandas_datareader』を使いました。

関連記事

Pythonなら"爆速" でチャートやグラフをつくれる:解説編

続きを見る

 

今回は、新しい価格取得のライブラリをご紹介します。

df = yf.download('wfc',
                 start='2019-01-01',
                 end=datetime.date.today() ,
                 auto_adjust='1d')

・今回使った価格取得のライブラリ

yfinance

・1行目:”yfinance” "Yahoo!finance US" から価格データを取得するためのライブラリです。”yf.download( )” とすることで、Yahoo!finance USから価格データをダウンロードできます。

今回は、価格データを入れる変数の名前を『df』とし、この中にウェルズ・ファーゴ(WFC)の四本値と取引ボリュームのデータを一気に格納します。

次にカッコの中の引数について説明します。

yfinanceの引数

・1行目:”wfc” は、ウェルズ・ファーゴのティッカーコードです。一番最初には、取得したい銘柄のティッカーコードを入れます。
例:アップルなら ”AAPL” / アマゾンなら "AMZN"

・2行目:”start” には 価格を取得する最初の日を設定します。

・3行目:”end” には 価格を取得する最後の日を設定します。

・3行目:”datetime.date.today()” とすることで、コードを実行した日を最終日に設定できます。これは定型文みたいなものです。コードを書いていくうちに慣れていきます。

・4行目:”auto_adjust” でチャートデータの時間軸を設定します。
今回は日足のチャートを作成するので”1d”としました。

 

ちゃんと価格データが取得できているかどうかを確認してみましょう。

df.head()
df.tail()

最初から5つの価格データ

最後から5つの価格データ

headとtail

・1行目:”変数名.head ()” とすることで、最初から5つの価格データを表示します。

・2行目:”変数名.tail()” とすることで、最後から5つの価格データを表示します。

 

コードの解説③:移動平均線の設定

今回は、多くの市場参加者がよく使う50日移動平均線と200日移動平均線を設定します。

なお、50日移動平均線は『単純移動平均線』となります。
200日移動平均線は『指数平滑移動平均線』となります。

単純移動平均線とは

一定期間の終値の平均値をつなぎ、それを折れ線グラフで表したテクニカル指標のこと

計算はいたって単純です。

例えば、10日間の移動平均線は(当日終値+前日終値+2日前終値+3日前終値+...10日前終値)÷10で計算できます。

100日間の移動平均線ならば(当日終値+前日終値+2日前終値+3日前終値+...100日前終値)÷100で計算できます。

 

指数平滑移動平均線とは

過去の価格の中でもより ”直近の価格" に比重を置いて計算された移動平均線のこと

指数平滑移動平均線(EMA)は、現在からより近い価格の値動きを反映するテクニカル指標です。

計算はちょっと複雑です。以下のように段階的に計算していきます。

EMAの計算式

・1日目の計算:(c1+c2+c3+c4+・・・+cn)÷n

・2日目以降の計算:前日の指数平滑移動平均+α×(当日終値-前日の指数平滑移動平均)
c1=当日終値 cn=n-1日前の終値 α(平滑化定数)=2/(n+1)

EMAのように、複雑な式で計算するテクニカル指標がたくさんあります。

しかし、Pythonを使えばどんな複雑な計算もシンプルなコードで簡単にできます。

それが以下のコードです。

・移動平均線を設定するコード

df['ma50'] = df['Close'].rolling(50).mean().shift()
df['ma200'] = df['Close'].ewm(200).mean().shift()

新しいカラムの設定

まずは、ウェルズ・ファーゴ(WFC)の価格データが入っている変数『df』に、移動平均線のデータを入れる新しいカラムを作ります。
作り方は簡単です。『 df[ '新しいカラムの名前' ] 』とするだけです。

新しいカラムの設定が終わったら、次は移動平均線の計算です。

移動平均線は終値をベースに計算されます。

yfinance” から "Yahoo!finance US" の価格データを取得する場合、終値のカラム名は『Close』となります。

よって移動平均線を計算する場合は、『df['Close'].移動平均線を計算するコード』というのが基本的な型となります。

詳細を確認してみましょう。

移動平均線の設定

・1行目:50日の単純移動平均線を設定するコードです。
ポイントは ”rolling” です。カッコの中に設定したい期間を入力します。今回は50日なので『50』と入力します。
その後、”.mean()” で平均値を計算。
最後に ”.shift()” で1日ずつ差分を取って50日移動平均線を計算します。

・2行目:200日の指数平滑移動平均線を設定するコードです。
ポイントは ”ewm” です。これが指数平滑移動平均線を計算するコードです。
カッコの中に設定したい期間を入力します。今回は200日なので『200』と入力します。
その後、”.mean()” で平均値を計算。
最後に ”.shift()” で1日ずつ差分を取って200日移動平均線を計算します。

移動平均線を設定するコツ

  • 単純移動平均線を描画したい場合は『rolling』
  • 指数平滑移動平均線を描画したい場合は『ewm』

これさえ覚えておけば、あとは設定したい期間をカッコの中に入れるだけで、どんな期間の移動平均線でも一瞬でチャート上に描画することができます。

 

コードの解説④:チャートを描画する

さて、いよいよチャートの描画です。

fig = go.Figure()

fig.add_trace(go.Scatter(x=df.index, 
                         y=df.ma50, 
                         name='SMA50'))
fig.add_trace(go.Scatter(x=df.index, 
                         y=df.ma200, 
                         name='EMA200'))

fig.add_trace(go.Candlestick(x=df.index,
                             open=df.Open,
                             high=df.High, 
                             low=df.Low,
                             close=df.Close,
                             name='WFC'))


fig.update(layout_xaxis_rangeslider_visible = False)

go.Figure

・1行目:”fig = go.Figure()” は 、figという変数の中に空のPlotlyチャートを用意するコードです。”go.Figure()” は定型文です。コードを書いていくうちに慣れていきます。

fig.add_trace

・3行目~8行目:”fig.add_trace( )” で、チャートの中身をひとつひとつ設定していきます。今回は50日移動平均線、200日指数平滑移動平均線そしてWFCのローソク足チャートの3つを描画します。
なので、”fig.add_trace”も3つ別々に設定していきます。

fig.add_traceの中身

・3行目~8行目の詳細:
go.Scatter:このコード で移動平均線を描画することを宣言します。

x:ここには時系列のデータを入れます。変数名.indexとすれば簡単に時系列のデータがPlotlyに認識されます。

y:ここには移動平均線のデータを入れます。変数名.カラム名とすれば50日と200日の各移動平均線のデータがPlotlyに認識されます。

name:ここにはチャート上に表示したい移動平均線の名前を設定します。

移動平均線の設定が終わったら、最後はローソク足チャートの設定です。

fig.add_traceの中身

・10行目~15行目の詳細:
go.Candlestick:このコード でローソク足チャートを描画することを宣言します。

x:ここには時系列のデータを設定します。
”変数名.index” とすればPlotlyが簡単に認識します。

open:ここには『始値』を設定します。
”変数名.Open”とすればPlotlyが簡単に認識します。

high:ここには『高値』を設定します。
”変数名.High”とすればPlotlyが簡単に認識します。

low:ここには『安値』を設定します。
”変数名.Low”とすればPlotlyが簡単に認識します。

close:ここには『終値』を設定します。
”変数名.Close”とすればPlotlyが簡単に認識します。

name:ここにはチャート上に表示したい銘柄名を設定します。
今回はウェルズ・ファーゴのティッカーコード『WFC』としました。

Open、High、Low、Closeの各カラム名は、Yahoo!finance USが設定している文字形式です。

なので、スペルミスを防ぐために『コピペ』してコードを書くことをおすすめします。

fig.update

・18行目:”fig.update( )” は、チャートのレイアウトを設定するコードです。
 ”layout_xaxis_rangeslider_visible” は、チャートの下に『レンジのスライダー』を表示するかどうかを設定するコードです。

・『False』ならば表示をしない設定
・『True』ならば表示をする設定

今回は必要ないので『False』で非表示にしました。

・レンジスライダー

さて、一連のコードを実行すると、最初で紹介したウェルズ・ファーゴ(WFC)の動的チャートが爆速で描画されます!

 

もちろん、価格や移動平均線の各データもチャート上で確認することができます!

ウェルズ・ファーゴのテクニカルチャート

日足(2019年以降)

 

今回紹介したコードは、どれもPythonやPlotlyの基本的なコードばかりです。

しかし、基本的なコードのみでも爆速でテクニカルチャートが描画できます。

さらにコードを付け足していけば、あなただけのオリジナルチャートを作ることだってできます。

この記事と出会ったのも何かの縁です。

ぜひ、ご自分だけのチャートを作ってみてください!

 

Pythonを学びたい方へ

今やPythonは、あらゆる分野で使われているプログラミング言語です。

Pythonを学んでおけば株式の投資に役立つだけでなく、これからのキャリアを形成する上でも力強い武器となるでしょう。

『私もPythonを学んでみたい!』

という人は以下のリンク先をご覧ください。

▼ Pythonを効率的に学ぶ方法を知りたいなら以下をクリック ▼

Pythonを学ぼう

 

なぜプログラミングを学ぶ必要があるのか?その理由がわかります。

そして、『これがPythonを効率的に学ぶ方法だ!』と自信をもっておすすめする学習方法について解説しています。

この記事と出会ったのも何かの縁です。
ぜひチャレンジしてみてください!

 

まとめ

・"Plotly" はデータを簡単に可視化してくれる便利なライブラリ
・"Plotly"を使えばテクニカルチャートだって”爆速”でつくれる


注記事項

ジェイの米国株投資ブログ(以下当サイト)に掲載されている記事は、投資の助言を目的としたものではありません。当サイトに掲載されたコンテンツの正確性については、可能な限り注意を払っています。しかし、意図せず誤情報が紛れ込む可能性や情報そのものが古くなっている可能性があり、その正確性を完全に保証するものではありません。
当サイトのコンテンツを参考に投資を行い、その後発生したいかなる結果についても、当サイト並びにブログ運営者は一切責任を負いません。すべての投資行動は『自己責任の原則』のもとで行ってください

 

-Pythonコード集