【2026年版】24時間株価・仮想通貨を監視&分析するAIシステムをVPS上に作る
最初に結論を言います
VPSに置くべき。自分のPCに置くのはやめた方がいい。
株価や仮想通貨の監視ボットって、「とりあえず自分のPCで動かしてみよう」から始める人が多い。自分もそうだった。でも正直、PCつけっぱなしは精神的に気になるし、何かあったときにリモートデスクトップで入らないといけないから結局手放しにならない。それって「自動化した」とは言えない。
VPSに乗せて初めて「本当に手放した」感覚になれる。月数百円〜1,000円台で動き続けてくれる環境が作れるんだから、ここはケチらなくていい。
もう一つ。このシステムにGPUは一切不要。 LLMはOpenAI APIを叩くだけだから、GPU付きVPSを勧めてくる記事を見かけたら少し疑った方がいい。GPU VPSは月額が跳ね上がる。この用途では完全に過剰スペック。
システム全体の構成
VPS(24時間稼働)
├── price_monitor.py ← 価格データ取得(yfinance/ccxt)
├── ai_analyzer.py ← LLMで市場コメント生成(OpenAI API)
├── alert_sender.py ← Slack/LINE通知送信
└── cron / systemd ← 定期実行・常駐管理
| ツール | 役割 |
|---|---|
| yfinance | 株価・ETFデータ取得(Yahoo Finance) |
| ccxt | 国内外の仮想通貨取引所API統合ライブラリ |
| OpenAI API | 価格変動のAI解説生成 |
| Slack Webhook | 通知送信先 |
構成としてはシンプル。Pythonスクリプトが数個あって、それをVPS上で定期実行するだけ。「AIシステム」と聞くと大げさに聞こえるけど、やることは地道なスクリプト管理だったりする。難しくはない。
推奨VPSスペック
| 項目 | 最小 | 推奨 |
|---|---|---|
| vCPU | 1コア | 2コア |
| メモリ | 2GB | 4GB |
| SSD | 20GB | 50GB |
| 稼働率SLA | 99.9% | 99.99% |
| 固定IP | 必須 | 必須 |
正直に言うと、メモリ2GBで十分動く。 4GB推奨と書いたけど、監視対象の銘柄数が少なければ2GBで問題ない。最初は安いプランで始めて、重くなってきたらスケールアップする判断でいい。
固定IPだけは絶対に妥協しないでほしい。 取引所のAPIキーにIPホワイトリストを設定するとき、IPが変わるたびに設定し直しが発生する。これが地味に面倒で、セキュリティ上も良くない。固定IPはこの用途では必須条件と思ってください。
月額で計算すると、XServer VPSの2GBプランなら約830円/月 = 1日あたり約27円。コーヒー1杯より安い。
Step 1: Python環境と必要ライブラリの準備
# VPSにSSHログイン後
python3 -m venv ~/trading-env
source ~/trading-env/bin/activate
pip install yfinance ccxt openai requests python-dotenv schedule
venv(仮想環境)を作るのは「後で消しやすくするため」でもある。試行錯誤しながら作るときに、環境が汚れていくのが地味にストレスになるから、最初からこの習慣をつけておくと楽。
Step 2: 株価監視スクリプト(yfinance)
#!/usr/bin/env python3
# price_monitor.py
import yfinance as yf
import datetime
import os
from dotenv import load_dotenv
load_dotenv()
WATCHLIST = {
"日経225 ETF": "1321.T",
"S&P500 ETF": "SPY",
"トヨタ": "7203.T",
"Apple": "AAPL",
}
ALERT_THRESHOLD = 0.03 # 3%以上変動でアラート
def check_prices():
alerts = []
for name, ticker in WATCHLIST.items():
stock = yf.Ticker(ticker)
hist = stock.history(period="2d")
if len(hist) < 2:
continue
prev_close = hist["Close"].iloc[-2]
current = hist["Close"].iloc[-1]
change_rate = (current - prev_close) / prev_close
print(f"{name}: {current:.2f} ({change_rate:+.2%})")
if abs(change_rate) >= ALERT_THRESHOLD:
direction = "上昇" if change_rate > 0 else "下落"
alerts.append(f"⚠️ {name} が {change_rate:+.2%} {direction}しています(現在: {current:.2f})")
return alerts
if __name__ == "__main__":
alerts = check_prices()
for a in alerts:
print(a)
ALERT_THRESHOLD = 0.03(3%)はデフォルトとして書いてあるけど、ここは好みで調整してほしい。仮想通貨なら5〜10%にしないと通知がうるさくなる。逆に株式ETFなら2%でも十分シグナルになる。最初は大きめにしておいて、「この通知多すぎる」と思ったら絞る、でいい。
Step 3: 仮想通貨価格取得(ccxt)
import ccxt
def get_crypto_prices():
exchange = ccxt.binance() # bybit, coincheck等も同じ書き方で使える
symbols = ["BTC/USDT", "ETH/USDT", "SOL/USDT"]
results = {}
for symbol in symbols:
ticker = exchange.fetch_ticker(symbol)
results[symbol] = {
"price": ticker["last"],
"change_24h": ticker["percentage"],
}
print(f"{symbol}: ${ticker['last']:,.2f} ({ticker['percentage']:+.2f}%)")
return results
ccxtの良いところは、Binanceだろうとbybitだろうとcoincheckだろうと、コードがほぼ同じで動くところ。取引所を変えるときはccxt.binance()の部分を書き換えるだけ。最初はBinanceで試して、使い慣れてから他の取引所に移す流れでいいと思う。
Step 4: LLMで市場状況を解説する
from openai import OpenAI
client = OpenAI(api_key=os.environ["OPENAI_API_KEY"])
def generate_market_comment(price_data: dict) -> str:
summary = "\n".join([
f"- {symbol}: ${info['price']:,.2f} ({info['change_24h']:+.2f}%)"
for symbol, info in price_data.items()
])
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{
"role": "user",
"content": f"以下の仮想通貨価格データをもとに、100字以内で今日の市場状況を日本語でコメントしてください:\n{summary}"
}]
)
return response.choices[0].message.content
モデルはgpt-4o-miniで十分。 「市場コメントを100字で作る」程度の作業に、上位モデルを使う必要はない。コストも全然違う。gpt-4o-miniなら2時間おきに呼び出しても月数十円〜数百円の範囲に収まる。ここに上位モデルを使いたくなる気持ちはわかるけど、まず安いモデルで動かして、「これじゃ物足りない」と感じてから切り替える判断で十分。
繰り返すけど、このLLM呼び出しにGPUは一切関係ない。 APIを叩くだけ。VPSのCPUで余裕で処理できる。
Step 5: Slackへ通知送信
import requests
SLACK_WEBHOOK = os.environ["SLACK_WEBHOOK_URL"]
def send_slack(message: str):
requests.post(SLACK_WEBHOOK, json={"text": message})
# メイン処理
def main():
stock_alerts = check_prices()
crypto_data = get_crypto_prices()
ai_comment = generate_market_comment(crypto_data)
message = f"*📊 マーケットアップデート {datetime.date.today()}*\n"
message += f"🤖 AIコメント: {ai_comment}\n"
if stock_alerts:
message += "\n*⚠️ アラート*\n" + "\n".join(stock_alerts)
send_slack(message)
if __name__ == "__main__":
main()
Slack Webhookの設定自体は5分もあればできる。「Slack Webhook 設定方法」で検索すれば公式ドキュメントが出てくるのでそちらを参照してほしい。LINEに飛ばしたい場合もLINE Notify(またはLINE Messaging API)に差し替えるだけで、このコードの構造はほぼそのまま使える。
Step 6: systemdで常駐化・cronで定期実行
# crontabで朝9時(市場開始前)と15時半(市場終了後)に実行
crontab -e
0 9 * * 1-5 /home/user/trading-env/bin/python /home/user/price_monitor.py
30 15 * * 1-5 /home/user/trading-env/bin/python /home/user/price_monitor.py
# 仮想通貨は24時間なので2時間おきに実行
0 */2 * * * /home/user/trading-env/bin/python /home/user/price_monitor.py
cronのタイムゾーンにだけ注意してほしい。VPSのデフォルトがUTCになっていると、日本時間で「朝9時実行」のつもりが「夜中に実行」になる。timedatectl set-timezone Asia/Tokyoでタイムゾーンを変えておくか、cronの時刻をUTCで逆算して指定するか、どちらかを最初に確認しておくこと。これで一度ハマると地味に時間を取られる。
まとめ:あなたの使い方で選ぶ
はっきり書いておきます。「自分のPCで動かす」は選択肢から外していい。 VPS代を惜しむより、PCつけっぱなしの電気代と精神的コストの方が高くつく。
| あなたの状況 | 判断 |
|---|---|
| とにかく安く始めたい・使用頻度が低い | 時間課金のKAGOYAで試す。無料14日間あり |
| 月76時間以上VPSを稼働させる予定 | XServer VPS(830円固定)の方が安くなる |
| 「毎月いくらか計算したくない」人 | XServer VPS一択。固定料金は精神的にラク |
| GPU付きVPSを勧められた | 断っていい。このシステムにGPUは不要 |
| 自動売買まで実装したい | まず通知だけで動かしてから考える。焦らない |
| VPS選びで迷っている | さくらのVPSは老舗で安定。初心者でも情報が多い |
月額コスト感の目安:
- XServer VPS 2GBプラン:約830円/月 ≒ 1日27円
- さくらのVPS 2GBプラン:約880円/月 ≒ 1日29円
- OpenAI API(gpt-4o-mini、2時間おき呼び出し):月数十円〜数百円
合計しても月1,000〜1,500円以内に収まる構成。24時間監視体制としては破格だと思う。
自動売買まで発展させるかどうかは、まず「通知だけ受け取る」フェーズで動かしてみてから考えれば十分。最初から完璧なシステムを目指す必要はない。これが最終回答じゃないんだから、まず動かしてみてください。