😽

朝から株野郎?計画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で仮想環境を作成します。
作り方はこちら。
https://zenn.dev/rucco/scraps/d3c72354d97f85

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