8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

株価指数の下落率に応じてLINE通知する。(S&P500)

Last updated at Posted at 2020-09-10

積立投資をしているのですが、暴落時には積み立て金額を増やすのがより効率が良いです。
とある動画で、S&P500が先週対比にて-5%以上の時は買い増すチャンスということを知り、
S&P500の下落率を、LINE通知できる様に実装しました。

前提:
・実行環境:GAS
・LINE notify にてTOCKEN取得済み。
LINE通知等で検索すると、LINETOCKENの取得方法等確認が出来ます。
・S&P500の値は下記APIを利用
https://financialmodelingprep.com/developer/docs/
*1

上記に関してはLINE notify で検索してみてください

仕様:
昨日と先週のS&P500の終値を通知

実際のコード


const lineToken = "*******";
const apiKey = "*******";

function main() {
  const apiUrl = `https://financialmodelingprep.com/api/v3/historical-price-full/%5EGSPC?apikey=${apiKey}`;

  const apiOptions = {
     method : 'get'
  };

  // arrray or string or object なのかを確認する。
  const responseApi = UrlFetchApp.fetch(apiUrl, apiOptions);
  const responseJson = JSON.parse(responseApi.getContentText());
  
  const yesterday = responseJson.historical[0].date
  const yesterdayClosePrice = responseJson.historical[0].close
 
 //日付を元に取得する方が良い。
 const lastWeekDay = responseJson.historical[5].date
 const lastWeekDayPrice = responseJson.historical[5].close

  //変数名がvolatiltyがよい。
  const volatilty = ((yesterdayClosePrice/lastWeekDayPrice)-1)*100;
  //ratio
  const displayRation = Math.round(volatilty * 10) / 10

  console.log(typeof lastWeekDay);
  const message = `\n S&P500 の対先週終値が【${displayRation}%】です!
  \n先週終値: ${lastWeekDayPrice} (${lastWeekDay.replace(/"/g, '')})\n先日終値: ${yesterdayClosePrice}(${yesterday.replace(/"/g, '')})`;
  console.log(message);
  sendToLine(message);
}

function sendToLine(message) {
  const options = {
    "method": "post",
    "payload": {"message": message},
    "headers": {
      "Authorization": "Bearer " + lineToken
    },
    "muteHttpExceptions" : true,
  };
  UrlFetchApp.fetch("https://notify-api.line.me/api/notify", options);
}

*1
公式サイトにある様に無料で叩ける回数が250回まで。
https://financialmodelingprep.com/developer/docs/pricing/
ただ、基本課金ベースのためか、ドキュメントは見易かったです。

困った点

一番困った点が無料でS&P500の終値提供APIが全く見つからなかったことです。
有名どころだと
Quandl
alphavantage

あたりですが、提供しているのが、月毎だったり、そもそも提供していなかったり。。。。

逆に個別株の株価を提供しているAPIは簡単に見つかるので株価指数の需要があまり無いんですかね。。。

週に一度の計算のため1.2年は無料回数範囲に収まるはずですが、
早めに良いAPIは見つけておきたいです。

何か良いAPIがあれば紹介くださると嬉しいです!

あとは、GASだとライブラリとかをそのまま使えないので、書き方がどうしても古いものになってしまうので、
そのせいで実装に無駄に時間をかかりました。
可読性も下がるので、あまり機能を増やしたりデバックするにはあまりおすすめできないです。
アロー関数 や ${}を使えないのは結構辛かった。。。
*追記
使えるようになっています。

ただ、スケジューラの設定等が楽なのと、本番環境、サーバーの用意等が無料で手軽にできるのはとても楽です。

pandas

ちなみに、pandasというpythonのモジュールを利用しても、
簡単に株価指数を取得できたのでおすすめです。
https://pandas.pydata.org/

今回はGASを利用したかったので、言語関係なく使えるAPIでデータ取得できるものを探していましたが、
Pythonのライブラリ×herokuでも断然ありだと思います。

もう少し、この書き方をした方がいいよ、とか、間違っている点等あれば気軽にコメントください。
この記事が少しでも参考になった、面白かったという方はLGTMくれると嬉しいです〜!

8
8
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?