【収支】MATLAB、Pythonで株価予測 その53【シミュレーション⑤】

【収支】MATLAB、Pythonで株価予測 その53【シミュレーション⑤】 株価予測
【収支】MATLAB、Pythonで株価予測 その53【シミュレーション⑤】

バックナンバーはこちら。
https://www.simulationroom999.com/blog/stock-predict-matlabpython-backnumber/

はじめに

前回は、極大値と極小値の特定のMATLABコードを作成した。
一部、最初に極小値が来ることを想定しているコードになっていることが問題点としてあるが、
最初に買付をする想定なので、むしろ今回のコードの方が都合が良いという判断をした。

今回は、これのPython(Numpy)版を作成する。

登場人物

博識フクロウのフクさん

指差しフクロウ

イラストACにて公開の「kino_k」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=iKciwKA9&area=1

エンジニア歴8年の太郎くん

技術者太郎

イラストACにて公開の「しのみ」さんのイラストを使用しています。
https://www.ac-illust.com/main/profile.php?id=uCKphAW2&area=1

極大値と極小値の特定する(Python版)

太郎くん
太郎くん

今回は、Python(Numpy)で極大値と極小値の特定するコードだね。

フクさん
フクさん

早速コードを見せよう。

import numpy as np
import matplotlib.pyplot as plt

N=512;
x=np.linspace(-np.pi,np.pi,N)
fx=np.sin(x)+np.sin(3*x)+np.sin(5*x)
ft=fx;
max_fx=np.max(fx)
max_ft=np.max(ft)
plt.plot(fx)

# 極大値、極小値特定
maxima = np.zeros(N)
minima = np.zeros(N)
fxTmp=fx[0]
mode = 0
for i in range(1,N):
    if mode == 0:
        if fx[i]>fxTmp:
            minima[i]=ft[i]*(max_fx/max_ft)
            mode = 1
        fxTmp=fx[i]
    if mode == 1:
        if fx[i]<fxTmp:
            maxima[i]=ft[i]*(max_fx/max_ft)
            mode = 0
        fxTmp=fx[i];

maxima[maxima==0]=np.nan # 極大値だけを残す
minima[minima==0]=np.nan # 極小値だけを残す
plt.plot(maxima,'ro')  # 極大値をplot
plt.plot(minima,'bo')  # 極大値をplot

plt.show()

動作結果

フクさん
フクさん

そして動作結果だ。

極大値、極小値の特定(Python版)
太郎くん
太郎くん

MATLAB版と同じく、極大値が赤丸、極小値が青丸だね。

フクさん
フクさん

ついでに、入力波形を反転したものも出しておこう。

極大値、極小値の特定(Python版)の反転
太郎くん
太郎くん

当然と言えば当然だけど、こっちもMATLABの時と同じ結果だ。

これからの話

太郎くん
太郎くん

あとは、サンプル信号じゃなくて実際のVTIチャートを入れるようにすればOKってことかな?

フクさん
フクさん

そうだね。
ただし、実際には赤丸、青丸のプロットした値を出力する必要があるので、
その分のコード修正は必要になるが、
プロット位置が分かってるんで、本番コード作成時に入れ込めばOKだろう。

フクさん
フクさん

あと、入力のVTIチャート自体はドル単位なんで、
イメージ湧きやすいように円単位に変換しようと思う。
とりあえずは、$1=\127程度で良いだろう。

太郎くん
太郎くん

確かに円で出してもらった方がイメージ湧きやすいよね。

まとめ

フクさん
フクさん

まとめだよ。

  • 極大値と極小値の特定するコードのPython(Numpy)版を作成。
  • 動作としては反転波形も含めてMATLABと同一。
  • 実際にはこれらコードに向けて以下が必要だが、本番コード作成時に盛り込む。
    • 各プロット時の値の取得。
    • ドルから円へ変換。
      • $1=\127で計算する予定。

バックナンバーはこちら。

コメント

タイトルとURLをコピーしました