朝から株野郎?計画1
アプリでやりたいこと(変わるかも^^;)
- 毎朝 6時ごろに株価データを自動取得
- 保有株や監視銘柄の前日終値や変動をチェック
- テクニカル(RSI・移動平均・MACDなど)やファンダ(PER・利回り)を分析
- その日のおすすめ(買い候補)や「売り時シグナル」が通知で届く
- 配当日・決算日・権利落ち日もお知らせ
システム構成のイメージ
📅 スケジューラー(朝6時起動)
AWS Lambda / Firebase Functions / Android WorkManager
CRONジョブで朝6時に実行
📈 株価データ取得
- 米株:Yahoo Finance API(yfinance)や Alpha Vantage API
- 日本株:kabutan, Yahooファイナンス, MINKABU(Webスクレイピングも可)
🧠 分析ロジック(Pythonなど)
- テクニカル分析:RSI・移動平均・MACD
- 売買シグナル:ルールベース or 簡易AI
- 配当・イベント情報:四季報APIや手動登録でもOK
📨 通知方法
- Androidアプリなら Push通知
- Gmailなどでメール通知も可能
- LINE通知Botも面白い!
📱 UI(あったら嬉しい機能)
- 保有株一覧(含み損益)
- 毎朝のサマリー表示:「今日の注目3銘柄」「売却検討銘柄」
- チャート表示(1年・RSI入り)
- 「おすすめ買い増しタイミング」リスト
アプリの名前
朝から株野郎!
アプリの名前ふざけてるけど、本人まじめです🙇♂️
何から手を付ける?
株価分析はPython使おうと思っているので、FastAPI環境から構築していく感じで進めます。
pythonは2か月ぐらい前にmnistという手書き数字を推論するモデルを作った時に
数十行のコードを書いて以来です。(しかもコパイロットにほぼ書いてもらったというね。。。)
書けるかしら^^;
仮想環境作成
VSCodeで仮想環境を作成します。
作り方はこちら。
pythonファイルを新規作成します。
ファイル名は[main.py」
作る場所は「kabu」フォルダです。「.venv」フォルダではありません!
でファイルを作成したら、最初にまず確認するのが、画面の一番下。
こんな感じで、作成した仮想環境フォルダが選択されていればOK。
もし、こんな感じになっていなければ、この部分をクリックすると、
画面上にインタープリタの選択が出てくるので、さっき作った仮想環境を選択
私の場合は「.venv:venv」を選択します(たぶんお勧めしてくれると思う!)
ライブラリのインストールは仮想環境にしていくので、ファイルを開いたら、確認するといいです。
FastAPI作成
必要なライブラリ
- fastapi:Web APIの本体
- uvicorn:FastAPIを動かすエンジン
- yfinance:株価データ(ヤフーファイナンス)
- pandas:データを集計・加工
ターミナル起動してインストールしていきます。
pip install fastapi
Successfully installed ~~~~と表示されればOKです。
次々、pip installしていきます。
yfinanceは若干時間がかかります。
そして、たぶん・・・ですが、pandasはyfinanceに同梱されています。
API作る
お試しAPIなので、apple・google・amazonの3社の直近5日間の
株データを取得してみる。
from fastapi import FastAPI
import yfinance as yf
from datetime import datetime, timedelta
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "朝から株野郎?APIにようこそ!"}
@app.get("/recommend")
def get_recommendation():
# 仮に3銘柄だけ分析
symbols = ["AAPL", "GOOGL", "AMZN"]
result = []
for symbol in symbols:
# 指定銘柄の株価データを取得
ticker = yf.Ticker(symbol)
# 過去5日分のデータを取得
hist = ticker.history(period="5d")
# データがどのように取得されたか確認するための出力
print(hist)
# 最新の終値を取得
latest = hist['Close'].iloc[-1]
# 前日の終値を取得
prev = hist['Close'].iloc[-2]
# 前日比を計算
change = round((latest - prev) / prev * 100,2)
# 結果をリストに追加
result.append({
"symbol": symbol,
"price": latest,
"change": change,
"recommend": "上がった" if change > 0 else "下がった"
})
return {"date": datetime.now().strftime("%y-%m-%d"),"recommendations": result}
実行してみる
F5じゃないよ^^;
ターミナルで、以下コマンドを入力
uvicorn main:app --reload
エラーが出なければ、以下のように表示されます。
もし、エラーが出るようなら、ターミナルの現在のフォルダがmain.pyと同じ
フォルダかを確認。
違っていれば、cdで移動。
ブラウザに以下URLを入力して、出力データを確認します。
http://127.0.0.1:8000/recommend
こんな感じに表示されています。とりま想定通りになったことが確認できたので、OK!
次は、ターミナルを確認します。
http://127.0.0.1:8000/recommend
にアクセスすると、
print(hist)が実行され、yfinanceから取得した生のデータを確認することができます。
こちらもOKです。
今回はお試しで仮のAPI作りましたが、
次回以降、本気APIを作って、Androidアプリにつなげていきます。
でも、その前にDBのこと考えなくっちゃ💦
Discussion