こんばんは、しゃーろです。
今回は、FXのアラート機能を自作してみました。
価格に到達したら知らせてくれるヤツです。
- Tradingviewの無料版は制限がある
- MT5はパソコンを開いてないと通知が来ない

だったら、無料で無制限にアラートを設定できる仕組みを作ればいいんだ!
ということで、今回挑戦してみました。
制作するのに中々時間がかかりましたが、結局、
cmdに価格は表示されるけど更新されないので、アラートがなるのか検証できなかった。
という結果になりました。
何の役にも立ちませんが、記録を残しておきたいと思います。
FX自動アラート機能 作り方
FX自動アラート機能の作り方は以下です。
- LINE Developesを始める
- LINE公式アカウントを作成する
- Messaging APIを利用する
- チャネルアクセストークンを発行する
- Flaskをインストールする
- ngrokをダウンロードしてcmdで実行する
- Webhook URLを設定する
- LINEアプリでメッセージを送る
- userIDを取得する
- アクセストークンとuserIDを使って実行する
1. LINE Developersを始める
まずは、LINE Developersに登録し、新規プロバイダーを作成していきます。


公式サイトを開き、「今すぐはじめよう」をクリックします。


ログイン、またはアカウントを作成します。


LINE Official Account Managerにログインするときに使っているアカウントで、LINE Developersコンソールにログインしたことがない場合は、開発者情報を登録する画面が表示されるので、名前とメールアドレスを入力して開発者アカウントを作成します。


登録が完了しました。
続いて、新規プロバイダーを作成していきます。


画面を少し下にスクロールし、「新規プロバイダーを作成」をクリックします。


プロバイダー名を適当に入力して作成しましょう。
今回は「fx-alert」としました。
2. LINE公式アカウントを作成する
続いて、LINE公式アカウントを作成していきます。


チャネル設定タブから「Messaging API」を選択しましょう。


「LINE公式アカウントを作成する」をクリックします。


認証画面が表示されたら、SMS認証を行います。


電話番号の認証が完了したら、サービスに戻りましょう。


LINE公式アカウントの作成画面です。
必要情報を入力してアカウントを作成します。
月200通までは無料で使えるので課金はしません。


アカウント作成が完了したら「LINE Official Account Managerへ」をクリックします。


問題が無ければ「同意」をクリックします。(2ページ目も同様)


スマホのLINEアプリからQRコードを読み取り、作成した公式アカウントを追加します。(LINE友達を追加する方法と同じ)


LINEのトーク画面の右上の四角をタップし、QRコードを読み込んでリンクを開きましょう。
「友達追加」をタップして、追加した後に「トーク」をタップすると、以下のようにメッセージが届きます。


パソコン画面は「次へ」をクリックし、下の画面が出たらバツボタンをクリックします。


これで、LINE公式アカウントの作成と友だち追加が完了しました。
3. Messaging APIを利用する
続いて、Messaging APIを利用していきます。


作成した公式アカウントの「設定」をクリックします。


左側のメニューから「Messaging API」を選択します。


「Messaging APIを利用する」をクリックします。


先ほど作成したプロバイダーを選択し、「同意する」をクリックします。


プライバシーポリシーと利用規約は何も入力せずに「OK」をクリックします。


問題なければ「OK」をクリックしましょう。


これで、Messaging APIを利用できるようになりました。
4. チャネルアクセストークンを発行する
続いて、チャネルアクセストークンを発行していきます。


再び、LINE公式アカウントの設定画面に戻り、作成したプロバイダーを開いて「Messaging API設定」をクリックします。


画面をスクロールし、チャネルアクセストークン(長期)の「発行」をクリックします。


これでトークンの発行が完了しました。
後程使うので控えておきましょう。
5. Flaskをインストールする
続いて、PCにFlaskをインストールしていきます。
すでにインストールされている方は、飛ばしてもらって構いません。
Flask(フラスク)を一言でいうと、「PythonでWebサイトやWebアプリを最短距離で作るための道具箱」です。
Flaskで何ができるの?
Flaskを使うと、以下のような仕組みを簡単に作ることができます。
- Webサイトの表示: 「このURLにアクセスしたら、この画面を出す」という処理。
- APIの作成: LINE Botやスマホアプリと通信して、データをやり取りする窓口。
- 便利なツールの公開: 自分が作ったPythonプログラム(AIの判定機など)を、ブラウザから使えるようにする。
参照:Google Gemini


Windowsの検索窓に「cmd」と打ち込み、コマンドプロンプトを起動させます。
そこに以下を入力し、Enterを押して実行します。
pip install flask
PCにFlaskがインストールされるまで、しばらく待ちましょう。
6. ngrokをダウンロードしてcmdで実行する
続いて、ngrokをダウンロードしていきます。
簡単にいうと、ローカルPC上で稼働しているネットワーク(TCP)サービスを外部公開できるサービスです。例えば、ローカルPCのWebサーバを外部公開することができます。
参照:Qiita


ngrok公式サイトにアクセスし、「Download」をクリックします。(Windowsの場合)
Macの場合は、左側のタブから「macOS」を選択しましょう。


「Download」をクリックし、Zipファイルがダウンロードされたら、右クリックをして全て展開します。
解凍したフォルダの中に「ngrok.exe」が入っていればOKです。


ngrokの公式サイトに戻り、サインアップします。


GoogleなどでサインアップすればOKです。


情報を入力して「Continue」をクリックします。



Skipボタンもあったので、それでもOKなはず
続いて、cmdを動かしていきます。


この画面が表示されたら下にスクロールしていくと、以下のようなトークンが表示されるのでコピーしましょう。
ngrok config add-authtoken xxxxxxxxxxxxx


次に、先ほど解凍した「ngrok.exe」が入っているフォルダの上のバーに「cmd」と打ち込み、コマンドプロンプトを起動させます。
コマンドプロンプトが立ち上がったら、以下を入力して実行します。
ngrok config add-authtoken あなたのトークン
続いて、以下をコピペして実行します。
ngrok http 5000


このような画面になればOKです。
7. Webhook URLを設定する
続いて、Webhook URLを設定していきます。


ForwardingのURLをコピーして、LINE Developersに戻りましょう。


Messaging API設定画面からWebhook設定を探し、「編集」をクリックします。


URLを貼り付け、最後に「/webhook」を追加して「更新」をクリックします。


Webhookの利用をオンにし、「検証」をクリックします。


→ngrokは動いてるが、Flaskが応答できてない。
FXアラートフォルダの中で「右クリック→新規作成→テキストドキュメント」と進み、名前を「app」とします。
拡張子が「.txt」となっていると思うので、「.py」に変更します。
警告が出ますが、そのまま進みましょう。
そして、app.pyを開き、以下のコードを貼り付けます↓
from flask import Flask, request
app = Flask(__name__)
@app.route("/webhook", methods=["POST"])
def webhook():
data = request.json
print(data)
return "OK", 200
app.run(port=5000)
貼り付けたら「Ctrl + S」で保存しましょう。


FXアラートフォルダの上のバーに「cmd」と打ち込み、コマンドプロンプトを起動させます。
以下を入力して実行します。
python app.py
LINE Developersに戻って「検証」をクリックします。


成功と表示されればOKです。
8. LINEアプリでメッセージを送る
続いて、LINEアプリから公式アカウントにメッセージを送ります。


そうすると、Flaskのcmdが動作するはずです。
‘events’: []
このようにイベントの中身が空になっている場合は、一度公式アカウントをブロック&削除してから、もう一度追加してメッセージを送りましょう。
ブロックした後に削除して、完全に消してから追加する。
LINEアプリの設定→友だち→ブロックリスト→編集→削除
もう一度メッセージを送り、Flaskのcmdのイベントの中に何かが表示されていればOKです。
9. userIdを取得する
app.pyを開き、以下のコードに差し替えて「Ctrl + S」で保存します。
from flask import Flask, request
app = Flask(__name__)
@app.route("/webhook", methods=["POST"])
def webhook():
data = request.json
print(data) # 全体表示
# ↓ここ追加
for event in data["events"]:
user_id = event["source"]["userId"]
print("あなたのuserId:", user_id)
return "OK", 200
app.run(port=5000)
念のため、今開いているcmdを全て閉じ、cmdを再起動させます。


app.pyが入っているフォルダで「cmd」と打ち込み、コマンドプロンプトを起動させ、以下のコードをコピペして実行します。
python app.py
続いて、ngrokのcmdを起動させていきます。


解凍した「ngrok.exe」が入っているフォルダの検索窓に「cmd」と打ち込み、コマンドプロンプトが立ち上がったら以下を入力して実行します。
ngrok http 5000
Forwardingに表示されているURLとLINE DevelopersのWebhook URLが同じか確認しましょう。


そうしたら、LINEのトーク画面から公式アカウントにメッセージを送ります。


メッセージを送ると、Flask画面にuserIDが表示されます。
これを控えておきましょう。
ここまで出来たら、LINE DevelopersのWebhook利用はオフにし、ngrokも削除してOKです。
10. アクセストークンとuserIDを使って実行する
続いて、取得したアクセストークンとuserIDを使って、cmdで為替の価格を表示させます。
FXアラートフォルダの中に、新しくPYファイルを作成しましょう。
右クリック→新規作成→テキストドキュメント


名前を「alert」、拡張子を「.py」に変更します。
ファイルを開いて、以下のコードをコピペして保存します。
import requests
import time
# ===== 設定 =====
TOKEN = "あなたのアクセストークン"
USER_ID = "あなたのuserId"
# 各通貨ごとに複数価格OK
PAIRS = {
"USDJPY": [156.0, 155.0],
"EURUSD": [1.10],
"GBPUSD": [1.30],
"EURJPY": [170.0],
"GBPJPY": [200.0],
"GBPEUR": [1.15],
"XAUUSD": [2400.0]
}
# ===== LINE通知 =====
def send_line(msg):
url = "https://api.line.me/v2/bot/message/push"
headers = {
"Authorization": f"Bearer {TOKEN}",
"Content-Type": "application/json"
}
data = {
"to": USER_ID,
"messages": [{"type": "text", "text": msg}]
}
requests.post(url, headers=headers, json=data)
# ===== レート取得 =====
def get_rates():
url = "https://open.er-api.com/v6/latest/USD"
res = requests.get(url).json()
if res["result"] != "success":
raise Exception("API取得失敗")
return res["rates"]
# ===== 価格計算 =====
def get_price(pair, rates):
if pair == "USDJPY":
return rates["JPY"]
if pair == "EURUSD":
return 1 / rates["EUR"]
if pair == "GBPUSD":
return 1 / rates["GBP"]
if pair == "EURJPY":
return rates["JPY"] / rates["EUR"]
if pair == "GBPJPY":
return rates["JPY"] / rates["GBP"]
if pair == "GBPEUR":
return rates["EUR"] / rates["GBP"]
if pair == "XAUUSD":
return rates.get("XAU") # 無い場合はNone
return None
# ===== 状態 =====
previous_prices = {}
triggered = {}
# ===== メインループ =====
while True:
try:
rates = get_rates()
for pair, targets in PAIRS.items():
price = get_price(pair, rates)
if price is None:
continue
print(f"{pair}: {price}")
prev = previous_prices.get(pair)
# 初回は保存だけ
if prev is None:
previous_prices[pair] = price
continue
# ===== ここが重要(リスト処理)=====
for target in targets:
key = f"{pair}_{target}"
# すでに通知済みならスキップ
if triggered.get(key, False):
continue
# タッチ判定(跨ぎ)
crossed = (prev < target <= price) or (prev > target >= price)
if crossed:
send_line(f"{pair} タッチ! {target} 現在: {price}")
triggered[key] = True
previous_prices[pair] = price
time.sleep(120)
except Exception as e:
print("エラー:", e)
time.sleep(300)
コードの中の「アクセストークン」と「userID」は自分のものと差し替えましょう。
アラート価格はご自身で設定してください。
コード内、USDJPYのように複数の価格を設定すれば、そこでアラートが鳴ります。


FXアラートフォルダの検索窓に「cmd」と打ち込み、コマンドプロンプトを起動させます。
以下をコピペして実行します。
python alert.py
そうすると、以下のようにcmdに価格が表示されました。
これは、画面を開いていると120秒おきに自動で更新されます。
(使用しているのは無料のAPIなので、価格の更新が遅いです。)



遅すぎて更新されるのかも分からない…
アラートを再設定したい場合は、価格を書き換えて再度cmdを実行します。
通知は来るのか
この自作アラート機能を検証するべく、会社のGWである平日金曜日、為替相場が動いている時間帯にパソコンを付けて試してみました。
結局、
ずっとcmdの価格が更新されない。
だから、アラートを設定していても、価格が動かないから通知が来るのかどうか分からない。
という残念な結果に終わりました。
まとめ
今回は、FXの自動アラート機能を作れるのか試してみました。
最初は通知が来たんだけど、ブログ執筆用にやり直してたらうまくいかなくなってしまいました…
もしかしたら、放っておけば機能するかもしれません。
結構大変だったので、記録だけは残しておきたいと思います。
このアラート機能は保証ができませんので、自己責任でお願いします。
最後まで読んでいただき、ありがとうございました!








