😭「TradingViewとMT4を繋げたいけどサーバーは無理!」からのローカル救済作戦
『クラウドサーバーは高いし、設定難しいし...』と絶望していた私が、ngrokという魔法のツールを発見して、自宅PCでTradingView自動売買を実現した感動の物語。
💻 「自宅PCで自動売買ってできるの?」の答え
結論:できます!しかも無料で! 🎉
私も最初は「自動売買って、高いサーバー借りないとダメなんでしょ?」って思ってました。
でもngrokという魔法のツールを知って、人生が変わりました。自宅のPCがあたかもプロのサーバーになったんです!
「え、こんな簡単な方法があったの?」
そんなあなたに、私の感動をお伝えしたくてこの記事を書きました。

概要
システム構成
TradingView → Webhook → ngrok → Python → MT4 EA
🛠️ 「何が必要なの?」チェックリスト
- 🕳️ ngrok:「自宅PCを世界に公開する魔法のツール」(無料)
- 🐍 Python:「TradingViewからの信号を受け取る司令塔」(無料)
- 💹 MT4:「いつもの取引プラットフォーム」(無料)
- 📊 TradingView Pro:「Webhook機能が使える版」(月額数千円)
お、ほとんど無料じゃん! これなら学生でもできるですね。
ngrokのセットアップ
1. アカウント作成とダウンロード
ngrokにログインしてアカウントを作成します。

ファイルをダウンロードして解凍します。

2. ngrokの起動と設定
ngrok.exeをダブルクリックで起動します。

コマンドプロンプトが表示されます。

3. 認証トークンの設定
ダッシュボードから認証コマンドをコピーして実行します。

認証コマンドを入力してエンターを押します。

アカウント情報が保存されます。

4. HTTPトンネルの開始
以下のコマンドでローカルサーバーを公開します。
ngrok http 80

この外部公開URLをメモしておきます。

重要: このURLは起動するたびに変わります。
Python Webアプリケーションの作成
1. Pythonのインストール
Python公式サイトからインストーラーをダウンロードします。

Python 3.10を選択してダウンロードします。

重要: インストール時に「Add to PATH」にチェックを入れてください。

2. Webアプリケーションの実装
以下のファイル構成でWebアプリを作成します。

app.py
from flask import Flask, request, jsonify
import json
app = Flask(__name__)
# グローバル変数で最新の注文を保存
latest_order = ""
@app.route('/', methods=['POST'])
def webhook():
global latest_order
try:
# JSONデータを受信
data = request.get_json()
if data and 'order' in data:
latest_order = data['order']
print(f"受信した注文: {latest_order}")
return jsonify({"status": "success"}), 200
except Exception as e:
print(f"エラー: {e}")
return jsonify({"error": str(e)}), 400
@app.route('/', methods=['GET'])
def get_order():
global latest_order
# MT4からの注文取得リクエストに応答
order = latest_order
latest_order = "" # 注文を返したらクリア
return order
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80, debug=True)
3. 必要なライブラリのインストール
install.bat
pip install flask
pip install uvicorn
pause
kidou.bat
python app.py
pause
install.batを実行してライブラリをインストールします。

kidou.batを実行してWebアプリを起動します。
TradingViewアラート設定
1. Pine Scriptの作成
以下のPine Scriptコードを作成します。
//@version=5
strategy("Webhook Signal Strategy", overlay=true)
// シンプルなRSI戦略
rsi = ta.rsi(close, 14)
// エントリー条件
longCondition = ta.crossover(rsi, 30)
shortCondition = ta.crossunder(rsi, 70)
// エグジット条件
longExitCondition = ta.crossunder(rsi, 70)
shortExitCondition = ta.crossover(rsi, 30)
// 注文実行
if longCondition
strategy.entry("Long", strategy.long, comment="buy")
if longExitCondition
strategy.close("Long", comment="buy_close")
if shortCondition
strategy.entry("Short", strategy.short, comment="sell")
if shortExitCondition
strategy.close("Short", comment="sell_close")
2. アラートの設定
戦略にアラートを追加します。

3. Webhookメッセージフォーマット
アラート作成時に以下のJSONメッセージを設定します。
{
"symbol": "{{ticker}}",
"order": "{{strategy.order.comment}}"
}

Webhook URLにはngrokで取得したURLを設定します。
MT4とEAの設定
1. WebRequestの許可
MT4でWebRequestを有効にします。

ツール → オプション → エキスパートアドバイザー

「WebRequestを許可するURLリスト」に以下を追加:
http://127.0.0.1/http://localhost/

2. EA(Trading View.mq4)の実装
#property strict
input string web_hook_url = "http://127.0.0.1/";
input string input_symbol = ""; // 通貨ペア(空白の場合は自動)
input int magic_number = 124455;
input double input_lots = 0.01; // ロットサイズ
input int input_spread = 30; // スプレッド制限
input int input_slippage = 20; // スリッページ制限
void OnTick()
{
string order = "";
// スプレッドチェック
if(Ask - Bid <= input_spread * _Point)
{
order = web_request();
}
// ポジション管理
if(position_count(OP_BUY) > 0)
{
if(order == "buy_close")
{
position_close(OP_BUY);
}
}
if(position_count(OP_SELL) > 0)
{
if(order == "sell_close")
{
position_close(OP_SELL);
}
}
// 新規注文
if(order == "buy")
{
position_entry(OP_BUY);
}
if(order == "sell")
{
position_entry(OP_SELL);
}
}
string web_request()
{
string url = web_hook_url;
string headers;
string data;
char post[], result[];
string symbol = Symbol();
if(input_symbol != "")
{
symbol = input_symbol;
}
headers = "Content-Type: application/json\r\n";
data = "{\"symbol\":\"" + symbol + "\"}";
ArrayResize(post, StringToCharArray(data, post, 0, WHOLE_ARRAY, CP_UTF8) - 1);
int rest = WebRequest("GET", url, headers, 5000, post, result, headers);
string order = CharArrayToString(result);
StringReplace(order, "\"", "");
if(rest != 200)
{
Print(Symbol(), " error ", CharArrayToString(result));
}
else
{
if(order == "buy" || order == "buy_close" || order == "sell" || order == "sell_close")
{
Print(Symbol(), " web_request order: ", order);
}
return order;
}
return "";
}
int position_count(int side)
{
int count = 0;
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderType() == side)
{
if(OrderSymbol() == Symbol())
{
if(OrderMagicNumber() == magic_number)
{
count++;
}
}
}
}
}
return count;
}
void position_entry(int side)
{
if(side == 0)
{
bool res = OrderSend(NULL, side, input_lots, Ask, input_slippage, 0, 0, NULL, magic_number, 0, clrGreen);
}
if(side == 1)
{
bool res = OrderSend(NULL, side, input_lots, Bid, input_slippage, 0, 0, NULL, magic_number, 0, clrRed);
}
}
void position_close(int side)
{
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderType() == side)
{
if(OrderSymbol() == Symbol())
{
if(OrderMagicNumber() == magic_number)
{
bool res = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0, clrBlue);
}
}
}
}
}
}
3. EAの設定と動作確認

自動売買を許可します。

EAが正常に動作している場合、ニコちゃんマークが表示されます。

システム起動手順
1. ngrokの起動
- ngrok.exeをダブルクリック
ngrok http 80を実行- 生成されたURLをメモ

2. TradingViewの設定更新
アラートのWebhook URLを新しいngrok URLに更新します。

3. Pythonアプリの起動
kidou.batをダブルクリックして実行します。

4. MT4の準備
- MT4を起動
- EAをチャートに適用
- 自動売買をON
- EA設定を確認

まとめ
🎉 あなたへのメッセージ(同じ夢を持つ仲間へ)
「本当に私にもできるの?」と不安なあなたへ
この記事を最後まで読んでくれて、ありがとうございます。
きっと今、こんな気持ちじゃないですか?
「ngrokって名前からして難しそう...」
「コマンドとか使うの怖い...」
「失敗したらお金を失いそう...」
その不安、すっごくわかります。
私も最初は「自分には絶対無理」って思ってました。コマンドプロンプトすら触ったことがなかったので。
でも大丈夫。あなたにもできます
✨ この記事で手に入れたもの:
- 🧠 知識:自宅PCでプロ級の自動売買システムが作れることを知った
- 🛠 道具:ngrokという強力な味方を手に入れた
- 💪 勇気:「やってみよう」という気持ち
🚀 これからやること:
- デモ口座から始める:絶対にいきなり本番口座は使わない
- 小さく始める:最初は1つの通貨ペアから
- 記録をつける:何がうまくいって何がダメだったか
あなたの成功が楽しみです
数ヶ月後のあなた:
- 「あの時、諦めなくて良かった」
- 「今では寝てる間も自動売買してくれる」
- 「友達にも教えてあげたい」
そんな風になってるはず。
失敗しても大丈夫。私も何度も失敗しました。
でも、失敗するたびに強くなって、最後は成功しました。
あなたなら絶対にできます。応援してます! 🌟
もし途中で困ったことがあれば、遠慮なくコメントしてください。一緒に解決しましょう!
P.S. 初めて自動売買が成功した時の「やった!」という気持ちは、今でも忘れられません。あなたにもその瞬間が必ず訪れます。
この記事が役に立ったらシェアしてください
📚 プログラミング・開発 の関連記事
🚀『もうコード読まなくていい!』AIエージェント開発で激変した開発現場の衝撃体験談
マルチタスク対応AIエージェントが開発現場を根底から変えた。コード読解地獄からの解放、並列開発の圧倒的効率化、そして開発者の疲労激減の生々しい体験を魂込めて語ります。
続きを読む😎『Claude Code CLI でEA作成マスター』になるための実践的コツと落とし穴回避法
「Claude Code使ってるけどEAがうまく作れない...」そんなあなたへ!2025年最新のCLI操作テクニック、効率的な指示出し方法、よくあるトラブル解決法を実体験ベースで完全解説。初心者でも上級者のようなEAが作れる秘密のコツ教えます。
続きを読む😭『なんで記事が反映されへんの!?』3時間の格闘から生まれたデプロイシステム完全改良記
「記事書いたのにサイトに出てこない...」そんな地獄から這い上がった、血と汗と涙のデプロイシステム改良プロジェクト。import地獄からfetch天国への道のり、全部見せます。
続きを読む