らじおやじのダッシュボードをExcel VBA + RSSで作ってみた。


らじおやじとは
らじおやじとは、日々の株式投資情報を提供している、65歳のおじさんです。 私より一つ年上です。 ちょっとひねくれたところもある、 プログラミングも自分でやるようで、メインの株価分析ソフトは自分で作ったところがあるかわからないが、メンテナンスは外部プログラマーに任せているようである。 このソフトは、かなりいい出来だと思っているが、開発するには、本格的な開発言語と開発環境が必要だ。 しかし、途中で見せる、ダッシュボードのようなアプリ。現在の日経平均と移動平均線の乖離から、買い時売り時を判定するものなら、Excel VBAでできそうな気がした。 これはらじおやじ自身がプログラミングしているそうで、Visual Basicを使っているそうだ。


ダッシュボードアプリとは

上の画像が、そのアプリである。
日経平均株価は、リアルタイム値を表示しているが、情報入力ボタンで変更ができる。
変更したら、それぞれの項目を計算しなおして、再表示。
5,25,200MAは時系列データが取れれば計算可能、
矢印は、1日前のデータから上か下かかな?
RSIも、計算式から導入可能。
波形の強弱は?
RSIの波形: 最弱 : RSI < 25
弱 : 25 ≦ RSI < 50
強 : 50 ≦ RSI < 75
最強 : 75 ≦ RSI
シグナルは々判定しているのだろう。
とりあえず、最強なら”売り”、再示寂なら”買い”か。
R式乖離率は、それぞれの乖離率を足せばよい。
+7以上 ➡ 売り(天井)
-7以下 ➡ 買い(底)
価格乖離( 25MA): 現在値‐25MA +-1500円 でシグナル
価格乖離(200MA): 現在値‐200MA +-5000円 でシグナル
という仕様で、設計されている(動画より)
画面の設計
まずはExcelでレイアウト作成

実装
実装結果は以下となった


- データの取得
BookのOpenで、日経のページから、時系列データをダウンロードする。
1.日経平均ページの所定の位置へコピペする。
2.最終行を求め、5MA,25MA,200MAを所定の場所へ計算し、転記する。前日のMAも同様に計算する。 - 現在日付の表示
=today() で日付を表示し、セルの書式設定で、ユーザ定義で yyyy"年"m"月"d"日("aaa")" を設定。フォントの大きさ、太字で調整。 - 現在時刻
=now()で時刻を表示し、セルの書式設定で時刻で形式を選択 - 現在値
MarketSpeed2の関数、”=RssIndexMarket("N225", "現在値") ” を指定。本物と違うが、セルの形式で、通貨(\)を指定。 - 前日比
4.現在値ー6.前終を指定。本物と違うが、セルの形式で、通貨(\)を指定。 - 前終
MarketSpeed2の関数、”=RssIndexMarket("N225", "前日値") ”を指定。本物と違うが、セルの形式で、通貨(\)を指定。
その右の括弧内の数字は、前日比率(=前日比/現在値) - MA
日経のページから、当日までの日経平均値をダウンロードし、隣のシートにコピペする。当日から遡り、5,25,200日それぞれの平均を記述(=Average()関数使用) - RSI
RSIの計算式を使用して、日経平均値から計算(処理行がC801の場合)
前日比 : 前日値との差
値上がり幅合計 : 対象のデータ数内で前日比が+のものの合計。(SUMIF(OFFSET($G801,0,0,-$J$7,1),">0",OFFSET($G801,0,0,-$J$7,1))
値下がり幅合計 : 対象のデータ数内で前日比がーのものの合計。(SUMIF(OFFSET($G801,0,0,-$J$7,1),"<0",OFFSET($G801,0,0,-$J$7,1))
RSI(n) : =値上がり幅合計/(値上がり幅合計+ABS(値下がり幅合計))*100))
nはデータの数(対象日数。9か14) - 波形
最弱(RSI <25)、弱(25≦RSI<50)、強(50≦RSI<75)、最強(75≦RSI ) を記入
=IF($E$13<25,"最弱",IF($E$13<50,"弱",IF($E$13<75,"強","最強"))) - シグナル(波形)
仕様が見つからなかったが、最弱➡買い、最強➡売り を設定
=IF(J13="最弱","買い",IF(J13="最強","売り","なし")) - R式乖離(5+25)
[5MAとの乖離率]+{25MAとの乖離率]。現在値と各MAの乖離率を計算し、その5MAと25MAを足したものを表示。 - シグナル(R式乖離(5+25))
[5MAとの乖離]+{25MAとの乖離]が
’+7以上がピーク(天井)値 ➡ 売りシグナル
’ー7以下がボトム(底 )値 ➡ 買いシグナル - 価格乖離(25MA)
25MA-終値 - 価格乖離(200MA)
200MA-終値 - シグナル 価格乖離(25MA)
+1,500円 ➡ ”売り” ー1,500円 ➡ ”買い” - シグナル 価格乖離(200MA)
+5000円 ➡ ”売り” ー5000円 ➡ ”買い”
最後に
日経平均の時系列データが取れれば、あとはそれを使って計算するだけなので、VBAは一行も書かずに、関数だけでできた。
➡ 翌日、更新処理をしたら、いくつかバグを見つけた。時系列データは、日々1行筒増えるので、MAの計算を日々変更する必要がある。
よって、データの取得、貼り付け、MAの計算をVBAで書く必要が出てきた。
らじおやじ版は、現在値を書き換えできるが、こちらの版は、現在値を直接書き換えればよい。元に戻すには、AF1の式をコピペするか、AF1を参照すればよい。
日経平均時系列データはAPIで取りたかったが、WEB版のoffice365しか対応していないとのことで、クリック一発でダウンロードできる、日経のページを使った。
https://indexes.nikkei.co.jp/nkave/index?type=download
ダウンロード版は、3クリックでコピペできるので、まずはこれ。
ヤフーファイナンスや株探のページからもデータを取得できるが、複数ページにわたるので、テーブルを解析しなければいけない。
https://kabutan.jp/stock/kabuka?code=0000
https://finance.yahoo.co.jp/quote/998407.O/history?from=20240402&to=20250402&timeFrame=d
RSIの計算もそう難しいものではないが、Excelで実装説明しているページを探して、参考にした。
http://exceltechnical.web.fc2.com/rsi.html
作成したものは以下のリンクからダウンロードできます。
らじおやじボード