ひよこエンジニア

ひよこエンジニア

エンジニアになりたての25歳です。【電気回路】・【プログラミング×株】について記録を残してきます。

ローソク足チャートを描いてみた!

今回は株価チャートをpythonで描いていきます! 投資経験のある方は必ず見るであろうローソク足ですが、実はpythonのモジュールを使えば簡単に出力できるんです。

これは余談ですが、僕の祖父も株式投資をしています。祖父の凄いところは、自分が注視している銘柄を、何年も追い、手書きで方眼用紙に日足チャートを描いているのです!!!そこにテクニカル分析を書き込んでいつも睨めっこしています。僕が小さかった頃はナニしてるんだろーってくらいで大した関心もなかったんですけど、今考えるとめちゃめちゃ努力してる投資家で憧れます!

ネットで開示しているよりも過去のデータを持つことで、その銘柄の傾向を知ることができるなど、テクニカル分析で1%でも優位に立てるのではないかと考えます。そのため、株価チャートをローソク足表記でグラフ化し、保存する事を目的として行いました。

ローソク足

このブログではとりあえず日足のローソク足で説明します。 下の図にローソク足の構成要素である陽線陰線を示します。色に関しては、証券会社の表示方法によって異なりますのでご注意ください。 ローソク足チャートのメリットは、チャートを見る事で大まかに株価の動きがわかる事です。 陽線、陰線ではそれぞれ始値終値が逆転します。長方形になっている部分は、始値終値の中間価格帯になっており、長方形から上下に出ている髭のような線は、中間価格帯からはみ出た株価を示します。ローソク足の右側に適当に1日の株価の推移を描きましたが、これがローソク足と一致します。

f:id:shota_elec_py:20201015193159p:plain
ローソク足(左:陽線 右:陰線)

Pythonローソク足チャート作成

では本題に入りましょう。コードを下に載せました。まずはモジュールのインポートから始めます。

モジュール

モジュールはpandas、matplotlib、mpl_finance、numpyです。mpl_financeは古いモジュールのようで実行すると古いという警告が出ますが無視して使います。

from pandas_datareader import data 
import matplotlib.pyplot as plt
import mpl_finance as mpf
import numpy as np
from matplotlib.dates import date2num

株価取得

株価は、pandasを使って取得します。取得するためにはデータソースが必要なので、ここでは無料で使用できるstooqという世界各国の株価を掲載しているサイトを使用しました。取得する価格は終値です。今回は最近私がお世話になっていたワタベウェディングを例にやっていきます。

stockname='ワタベウェディング'
df=data.DataReader('4696.JP','stooq')
df=df.sort_index()
date=df.index

グラフ化

最後にグラフ化していきます。ローソク足を描くためにはmpl_financeのcandlestickを使います。 横軸はdate2numをつかうことで日付にし、縦軸はdf.indexにより株価をローソク足としてプロットします。

xdate=[x for x in df.index]
ohlc=np.vstack((date2num(xdate),df.values.T)).T
fig=plt.figure()
ax=plt.subplot()
mpf.candlestick_ohlc(ax,ohlc,width=0.7,colorup='r',colordown='b')
ax.grid()
ax.set_xlim(df.index[-100].date(),df.index[-1].date())
fig.autofmt_xdate()
plt.ylim(200,500)
plt.ylabel('Stock Price[yen]')
plt.show()

結果

上記プログラムを実行した結果を以下に示します。こんな感じで簡単に株価をローソク足で表すことができました!! 長期間の日足を見たいとき、証券会社(スマホ版?)によっては昔のものは見れない事がありますよね。そんな時はこのプログラムを実行して保存しちゃいましょう。グラフを描くのではなく、csvファイルで生データを保存する手もありですね!

f:id:shota_elec_py:20201015230333p:plain
ワタベウェディングの株価

まとめ

今回はローソク足チャートを描いてみました。それにしてもpython有能過ぎでしょって思っちゃいますよね(笑) 今後も自分がやりたいことをプログラミングで実現していきたいです!

【RLC直列回路】Pythonで解いてみた!

今回はRLC直列回路の過渡現象をpythonで見てみました。 過渡現象の計算は学生時代かなり苦労した記憶があります(笑)

Pythonで解くにあたって、手計算のようなきれいな式変形はせず、二階微分方程式を解いていきます!(きれいに式変形する方法知っている人がいたら教えてほしい。。。)

RLC直列回路

回路図をこちらに示します。

f:id:shota_elec_py:20201014230928p:plain
RLC直列回路

定常状態ではショートになるLとオープンになるCが直列接続されているので、イメージとしたら一定時間経てば回路に流れる電流は0でしょう。

微分方程式

それでは微分方程式を立てていきましょう!

キルヒホッフの第二法則を適用していきます。

import sympy as sym
import numpy as np
import matplotlib.pyplot as plt
E,R,L,C,q,t,C1,C2=sym.symbols('E R L C q t C1 C2')
q=sym.Function('q')

eq1=sym.Eq(E,L*sym.diff(q(t),t,2)+R*sym.diff(q(t))+q(t)/C)

ここでは電荷q(t)を変数として方程式を立てました。

電流を変数とした場合、Cにかかる電圧の式に積分が入ります。微分方程式を解く際は、式中の項に積分が存在すると解けないため、電流の定義式$$i(t)=\frac{d}{d t} {q\left (t \right )}$$$$ を用いて二階微分方程式の形に直しました。

この方程式を解いていきます。

eq2=sym.dsolve(eq1,q(t))

$$q{\left (t \right )} =CE+C_{1}e^{\frac{t}{2 L}\left(-R-\sqrt{R^{2}-\frac{4L}{C}}\right)} $$

$$+C_{2}e^{\frac{t}{2L}\left(-R+\sqrt{R^{2}-\frac{4L}{C}}\right)}$$

続いて、eq2をtで微分して、電流の方程式を作ります。

eq4=sym.diff(eq2.rhs,t)

これら二式に、初期条件を与えます。t=0時、コンデンサに蓄積された電荷が0で、流れる電流値が0だと仮定します。

eq3=sym.Eq(0,eq2.rhs.subs(t,0))
eq5=sym.Eq(0,eq4.subs(t,0))

$$ C_{1} = \frac{C E R}{2 \sqrt{R^{2} - \frac{4 L}{C}}} - \frac{C E}{2} $$

$$ C_{2 }=- \frac{C E R}{2 \sqrt{R^{2} - \frac{4 L}{C}}} - \frac{C E}{2} $$

C1,C2をeq2に代入し、微分することで、電流の方程式を導出。

eq7=eq2.subs(C1,sol1)
eq7=eq7.subs(C2,sol2)
eq8=sym.diff(eq7.rhs,t)
eq8=sym.simplify(eq8)

式がぐちゃぐちゃです(笑) $$\frac{C E \sqrt{\frac{1}{C} \left(C R^{2} - 4 L\right)}}{C R^{2} - 4 L} \left(e^{\frac{t}{L} \sqrt{\frac{1}{C} \left(C R^{2} - 4 L\right)}} - 1\right) e^{- \frac{t}{2 L} \left(R + \sqrt{\frac{1}{C} \left(C R^{2} - 4 L\right)}\right)}$$

後はパラメータを入力していきます。 記載のパラメータは、根号の中身が正の場合です。

para={E:12, R:11, L:2.5,C:0.1}
i=eq8.subs(para)
F_i=sym.lambdify(t,i,'numpy')
s=np.linspace(0,10,10000)

fig=plt.figure()
plt.plot(s,F_i(s),label='i(t)_(1)',color="b")
plt.xlabel("Time[t]")
plt.ylabel("Ampare[A]")
plt.legend()
plt.show

出力するグラフはこんな感じです。 上式に出てくる根号 $$ \sqrt{\frac{1}{C} \left(C R^{2} - 4 L\right)}$$ の中身が 負、0、正 でそれぞれ結果が異なります。 根号の中身が値が負になると、減衰しながら正弦波のような振る舞いをします。 根号の中身が0or正になると、グラフの形はにているのですが、0のほうがより急な減衰の仕方であると確認できます。

f:id:shota_elec_py:20201014230937p:plain
根号内符号=負

f:id:shota_elec_py:20201014230933p:plain
根号内符号=正, 根号内0

まとめ

今回はRLC直列回路の過渡応答について確認しました。 個人的には直流電源から交流の波形が確認できることが面白いかなと思います。 とりあえず電気回路をpythonで計算する知識は身につきました! 今後もこんな感じで備忘録として残していきたいと思います!

【RL直列回路】Pythonで解いてみた!

こんばんは。shotaです!

今回はRL直列回路の過渡応答をPythonを使って計算してみました!

過渡応答は大学1年の時に勉強した内容で、微分方程式を見て懐かしい感じがしました(笑)

Pythonを使いこなすためにも、今回は手書きではなく、コード入力で解いていきます!

RL直列回路

RL回路を図に示します。抵抗とインダクタが直列に接続されているシンプルな回路ですよね。

f:id:shota_elec_py:20201009233852p:plain
RL直列回路

この回路に、キルヒホッフの第二法則(電圧に関する式)を用いて、閉回路の電圧関係式を立てます。 $$E =R i{\left (t \right )} + L\frac{d}{d t} i{\left (t \right )}$$

これはi(t)についての一階微分方程式になります。 微分方程式を手計算で解くのってめんどくさいですよね。。(笑)初期値問題とかあるし。

めんどくさいと思っているそこのあなた、是非pythonで解いてみてください。 めちゃめちゃ楽に計算ができますよ!

今回使うモジュールはsympy、numpy、matplotlib です。左から順にざっくり説明すると、数式計算、配列計算、グラフ処理に関するものになります。

まずはモジュールのインポートから。

import sympy as sym
import numpy as np
import matplotlib.pyplot as plt

次に、使用する変数を定義します。ここで、iは微分方程式を解くにあたって関数として定義しています。

E,R,L,t,C1=sym.symbols('E R L t C1')
i=sym.Function('i')

ここで、先ほどの電圧に関する数式を書き、解きます。

eq1=sym.Eq(E,R*i(t)+L*sym.diff(i(t)))
eq2=sym.dsolve(eq1,i(t))

結果はこんな感じ。 $$i{\left (t \right )} = \frac{1}{R} \left(E + e^{\frac{R}{L} \left(C_{1} - t\right)}\right)$$

積分定数C1が出てきましたので、初期値を解いていきます。

eq3=sym.Eq(0,eq2.rhs.subs(t,0))
C=sym.solve(eq3,C1)[0]

そうすると、C1の値が算出できます。(上記C) 初期値が求まったので、C1に先ほど算出したCを代入します。

eq4=eq2.subs(C1,C)
eq4=eq4.expand()

これにより、一般解は $$i{\left (t \right )} = \frac{E}{R} - \frac{E}{R} e^{- \frac{R t}{L}}$$ 現状の僕の能力だとこれ以上式を簡潔にできませんでした。。。 良い方法知っている方いらっしゃれば是非教えて下さい!

i(t)が求まれば抵抗、インダクタ部にかかる電圧が分かります。

V_r=R*eq4.rhs
V_l=E-V_r

R, L, E, tに値を振っていきます。今回は始めの図に示したように適当な値としました。

para={E:sym.Piecewise((0,t<0),(100,t>=0)), R:100, L:100}
V_r=V_r.subs(para)
V_l=V_l.subs(para)

これらをtの関数にします。

F_V_r=sym.lambdify(t,V_r,'numpy')
F_V_l=sym.lambdify(t,V_l,'numpy')
s=np.linspace(0,10,20000)

最後にグラフ化します。

fig=plt.figure()
plt.plot(s,F_V_r(s),label='V_R')
plt.plot(s,F_V_l(s),label='V_L')
plt.axvline(x=1, color='black', linestyle='dashdot')
plt.xlabel("Time[t]")
plt.ylabel("Voltage[V]")
plt.legend()
plt.show

グラフはこんな形で出力されます。

f:id:shota_elec_py:20201009233904p:plain
RL直列回路の電圧過渡応答
グラフの縦線は、時定数τの位置になります。Rにかかる電圧はτ[s]経過で0.63Eとなります。3τ[s]で0.95Eとなるため、3τが過渡応答の区切り位置となります。

まとめ

今回は初めて電気回路をpythonで解いたため、簡単な回路を扱いました。 RLC回路はたしか二階微分方程式だった気がするので、次回はRLC回路で解いていきたいと思います!

ファンダメンタル分析

ファンダメンタル分析で使われる指標たち

こんにちは!shotaです!

今回は株についての備忘録を残していきます。

いきなりですが、株式投資をする際に投資家は何を判断基準にして投資しているのでしょうか?

もちろん投資家によっては「企業の製品が好き」であったり、「親族が働いているから応援する気持ちで」等、様々な理由で投資している方も多いと思います。

しかし、個人的な気持ちだけではリターンが見込める投資ができるのでしょうか? 少なからず客観的な判断を基に投資する事が必要だと思います。

そこで、客観的投資判断の指標として、大きく2つの方法があります。それはテクニカル分析ファンダメンタル分析です。テクニカル分析については後日、pythonのコードとともに記述しようと思っているので、今回はファンダメンタル分析に使用されるツールについて書いていこうと思います。

ファンダメンタル分析とは企業の経営状況や財務状況のデータを基に今後の株価を推測するものです。

こちらに、ファンダメンタル分析時に使用する指標たちを記載します。

PER (Price Earnings Ratio)

PERは株価収益率になります。 企業の収益に対して株価が安いのか判断する指標です。

$$ PER=\frac{株価}{一株当たりの純利益} $$

この指標は同業他社との比較で使用することになるかと思います。 たとえば、下の図だと、左側の方が割安だから投資しよ!って感じです。

f:id:shota_elec_py:20201004204154p:plain
PER

PBR (Price Book-Value Ratio)

PBRは株価純資産倍率になります。 会社の資産と現在の株価の比がこれに相当します。

$$ PBR=\frac{株価}{一株当たりの純資産} $$

ここで、一株当たり純資産とは、会社が解散したときに、株主に資産を分配される金額をいいます。そのため、純資産に対して株価が高い(PBRが大きい)と一般的には割高な銘柄となります。

ROE (Return on Equity)

ROE自己資本利益率です。 純資産に対してどれだけの利益があるのかを示します。 そのため、収益性がわかる指標です。

$$ ROE=\frac{純利益}{純資産} $$

自己資本利益率が高い企業は「投資を通して効率よく稼ぐ会社」という評価になります。一般的には10~20%が優良企業と言われています。

時価総額

会社が発行した株式の市場価格を合計したものです。 これにより、PBRやPERなどの割安である指標だけでなく、会社の規模感が把握できます。

まとめ

ファンダメンタル分析は、上記の指標で行うのが定石ですが、これは決算資料があって初めてわかるものです。そして、決算資料の中にはこれら以外にも、貸借対照表損益計算書キャッシュフロー計算書など、重要な資料もありますので、トータルで考えて投資すべきかどうか判断するのが大事になります。

ブログ始めました。

初めまして。

 

本日、2020年9月26日よりブログを始めましたshotaです!

記念すべき一回目の投稿は、僕の経歴についてザックリ記載していきます。

 

僕は今年から技術者として働き始めています。仕事内容はざっくり言えば電気系です。

 

大学時代は電気・電子工学部に所属しており、大学院時代は電気・機械工学を専攻としていました。

 

研究室では、電波に関する研究をしており、正直なところ電気回路に関する知識はそれほど持っていませんでした(笑)

 

しかし、会社に入り、配属した先ではがっつり電気回路を使います(笑)

特に、マイコンECUなどの電子回路も絡めた知識も必要なため、正直なところ現状の自分ではうまく仕事を回せていません。

 

そのため、プライベートの時間を割いて勉強をしていこうと決意し、インプットした内容をブログに残すこととしました。

 

初学者に近いため、しょうもない内容になる可能性大ですが、何かアドバイス、提案があればお願いします!

 

また、電気系のネタ以外にも、趣味として始めた【株】と【プログラミング】についても備忘録程度に記事として残していきたいと思います。

 

どれも進捗があり次第の投稿となるため、不定期になりますが、コツコツとやっていきたいと思います!