0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MT5をプログラムから操作するプログラム

0
Last updated at Posted at 2025-11-15

リポジトリはこちら

概要

株取引である MT5 を監視してゴールデンクロス、デッドクロスなどを検知して slack line グループへ通知を出すプログラムを作りました
(売買のロジックを書けば売買も可能です。AIと連携することでAIによる売買も可能になります。)

ゴールデンクロス、デッドクロスが発生すると流れが大きく変わることが多いため検知できると有利だと考えたためです

あとは面白そうだったからです!

制約

  • MT5 は Windows 上で動かす必要がある
  • Mt5 のアカウントは作成する必要がある
  • Mt5 に適切に設定をする必要がある
  • 今回のプログラムでは WSL 上の Docker 環境で動かすことを想定

仕組み

今回作成した仕組みは以下の通りです

  1. MT5 上でdocs/MT5で行う設定/WSL_FileBridge.mq5を常時実行しておく

    a. /mnt/c/Users/campbel/AppData/Roaming/MetaQuotes/Terminal/Common/Filesに移動平均線のデータがユニークな id 付きの csv で保存される

    b. 例) mt5_ma_20251113T165918Z_8fdf77.csv

  2. /mnt/c/Users/campbel/AppData/Roaming/MetaQuotes/Terminal/Common/Filesに作成されたファイルを WSL 上の Python から定期的に読み取り移動平均線のデータを取得して解析を行う

図で表すと以下の通り

環境設定

1. 環境変数の作成

  • docker/local/.env.exampleを参考にしてdocker/local/.envを作成
  • project/.env.exampleを参考にしてproject/.envを作成
    • slack へ通知を出す場合はSLACK_WEB_HOOK_URL_MOVING_AVERAGE_NOTIFICATION
    • LINE の特定のグループへ通知を出す場合はLINE_CHANNEL_ACCESS_TOKENLINE_MOVING_AVERAGE_NOTIFICATION_GROUP_ID
      • LINE の設定方法参照

2. MT5 の設定を行う

  • docs/MT5で行う設定を参考にして MT5 上で設定

3. Docker 環境の作成

  • make initコマンドを実行する

4. プログラムの実行

  • 移動平均線の検知参照

LINE の設定方法参照

まず以下ことを行てください。詳しい方法はネットで出てきます

  1. LINE Developers に登録する
  2. Messaging API を有効化
  3. Messaging API のアクセストークンを発行
  4. グループ作成の許可
  5. 自分のスマホの LINE でグループの作成
  6. グループ ID の取得の方法を参考にして上記で作った lINE のグループ ID を取得

グループ ID の取得の方法

サーバー立てずに使える代表格。ログインなしでも OK。

手順

  1. ブラウザで https://webhook.site/ を開く

    → いきなり画面上に ランダムな URL が出てる(これが受信 URL)

  2. その URL をコピーして、LINE Developers の

    「Messaging API 設定 → Webhook URL」 に貼り付ける

    • 「Webhook の利用」を オン
    • 「検証」ボタンを押して、成功になるのを確認
  3. 通知に使いたい LINE グループに Bot を招待

  4. そのグループで誰かが何か発言する(「test」でも何でもいい)

  5. 再び webhook.site の画面を見ると、左側のリクエスト一覧に 1 件増えてるのでクリック

    → 右側の JSON の中にこんなのが出てるはず:

    {
      "events": [
        {
          "type": "message",
          "source": {
            "type": "group",
            "groupId": "Cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
          },
          "message": {
            "type": "text",
            "text": "test"
          }
        }
      ]
    }
    

    この groupId本物のグループ ID

    これを今の send_line_group_message()group_id に入れれば OK。

  6. groupId をメモしたら、Webhook.site 側のログは削除してもいいし、

    LINE Developers 側の Webhook URL を空に戻しても OK

    (これ以降は push 送るだけなら Webhook 必須じゃない)

移動平均線の検知

概要

移動平均線は

  • 短期移動平均線: 5 日
  • 中期移動平均線: 20 日
  • 長期移動平均線: 60 日

と定義しています。

ゴールデンクロス、デッドクロスは短期移動平均線が長期移動平均線を横切った時と定義しています

実行方法

以下のコマンドを実行

docker compose -f "./docker/local/docker-compose.yml" -p mt5 exec mt5 \
  pipenv run python scripts/moving_average_detection.py --target ZECUSD,M5,30.0,30.0

target オプションの指定方法は銘柄,足,暴騰検知用の数値,暴落検知用の数値となります

例)

  • ZECUSD の 5 分足、15 分足、30 分足、1 時間足
  • GOLD の 5 分足、15 分足、30 分足、1 時間足
docker compose -f "./docker/local/docker-compose.yml" -p mt5 exec mt5 \
pipenv run python scripts/moving_average_detection.py \
--target ZECUSD,M5,30.0,30.0 \
--target ZECUSD,M15,30.0,30.0 \
--target ZECUSD,M30,30.0,30.0 \
--target ZECUSD,H1,30.0,30.0 \
--target GOLD,M5,30.0,30.0 \
--target GOLD,M15,30.0,30.0 \
--target GOLD,M30,30.0,30.0 \
--target GOLD,H1,30.0,30.0

注意
現状は LINE への通知は 1 時間足の検出が発生した場合とします。月の送信回数が決まているためなるべく大きい時間足として送信回数を減らしています

実際 5 分足のゴールデンクロス(デッドクロス)はあまり意味ないですし

そのため LINE へ通知をする場合は--target GOLD,H1,30.0,30.0のように 1 時間足を含めてください

この辺を変えたい場合はproject/scripts/moving_average_detection.pydetect_and_notify_once関数and "1時間足" in messageあたりを修正してください

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?