見出し画像

TradingViewアラートからMetaTraderで自動売買を行う(EA)

ねくすこです。(@tenten1091)
今回は、TradingViewのアラートを元にMT4で注文を行う手順を紹介します。

■概要

画像14

webhook受信サーバーを立て、
受信したアラートをソケット通信でEAに送信、注文を行います。

TradingViewのPineスクリプト、アラートの設定について
ある程度知っていることを前提としています。

画像15

◆用意するもの

MetaTrader4
TradingViewアカウント

◆用意するものコードから実行する場合

・Python 3.x
Flaskパッケージ

■使用するプロジェクト

画像13

コードを含むプロジェクト一式は
GitLabからダウンロード、もしくはCloneして下さい。

mql4experts
┃ ┗ alert_example.mq4includesocket-library-mt4-mt5.mqh

pythonngrok_auth.bat		ngrok認証バッチ
┣ ngrok_run.bat			ngrok実行バッチ
┣ python_build.bat		server.exe作成バッチ
┣ sender.py				アラート送信コード
┣ server.py				webhookサーバーコード
┣ server.exe			webhookサーバー実行ファイル
┗ setting.ini			各種設定ファイル

プロジェクトの構成は上記のようになっています。
MQL4でソケット通信を行うライブラリをこちらから拝借しています。

■使用方法

画像12

◆使用方法(サーバー編)

画像1

pythonディレクトリ以下のserver.exeを起動します。
ソースコードから実行する場合はコマンドからserver.pyを実行して下さい。

server.exeはpythonのコードを実行形式にしたものです。
pyinstallerを使用して作成しています(python_build.bat参照)

※上記のプロセスは開いたままで下記の手順に進んで下さい。

画像16

使用方法(サーバー公開編)

上記で起動したサーバーをngrokを使用し外部に公開します。
手動で外部公開を行える方は読み飛ばしてください。

こちらからアカウントを作成後、
Windows用の実行ファイルをダウンロードし、
ngrok.exeをpythonディレクトリ以下に配置します。

[ngrok]
TOKEN = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

setting.iniを開き、Authページに表示されている認証トークンを貼り付け、
ngrok_auth.batを実行して認証を行います。
※認証は一度行ってしまえばその端末では2度目以降は必要ありません。​

画像8

ngrok_run.batを実行して先ほどのサーバーの外部公開を行います。
Accountの項目が表示されていれば認証が通っています。
Forwardingの項目がサーバーのURLになります。

※上記のプロセスは開いたままで下記の手順に進んで下さい。

画像17

使用方法(アラート設定編)

画像8

TradingViewの各アラートの設定の
アラートアクション → Webhook URL にチェックを付け、
{サーバーのURL}/webhookと入力します。

この状態でアラートが発生するとサーバーで受信を行います。
アラート本文のフォーマットについては下記の通りです。

項目
・alert = アラート名
・order = 注文タイプ(long  short  longclose  shortclose)

項目=値 , 項目=値 のように設定します。

例1
alert = test, order = long  (Long:1 Short:0)
alert = test, order = long (Long:2 Short:0)
alert = test, order = longclose (Long:0 Short:0)

例2
alert = test, order = long  (Long:1 Short:0)
alert = test, order = short (Long:0 Short:1)
alert = test, order = shortclose (Long:0 Short:0)

closeオーダーが来るとその方向のポジションを全て閉じます。
反対オーダーが来ると逆のポジションを全て閉じてドテンします。

微妙な仕様ですが、PineでオーダーIDを管理するのが難しいのでこうなっています。

画像18

使用方法(MT4編)

画像2

MT4の『ファイル → データフォルダを開く』から
MQL4 → Experts に alert_example.mq4 を配置、
MQL4 → Include に socket-library-mt4-mt5.mqh を配置します。

画像5

『ツール → オプション』のエキスパートアドバイザから
DLLの使用を許可するにチェックを入れOKを押します。
※Windows標準のws2_32.dll、kernel32.dllを使用しています。

画像5

ナビゲーターからalert_exampleを選び、
全般からDLLの使用を許可するにチェックを入れます。

画像8

パラメーターの入力からパラメーターを入力してOKを押します。
各パラメーターの詳細は下記の通りです。

Magic : EAのID
Slippage : 許容スリッページ
Lot : ロット数
AlertName: アラート名
Host : ソケット通信で使用するIP
Port : ソケット通信で使用するポート番号

アラート名にはアラート設定のalert項目に対応した名前を入れます。
複数EAを起動させる場合はMagicとAlertNameをそれぞれ固有のものにして下さい。

画像4

チャートに適応後、alert_exampleの初期化ログが表示され、
サーバー側の画面にconnection : 127.0.0.1 XXXXXの文字が出力されます。
EAを起動した後にサーバーを起動させても接続は行いません。

この状態で同名のアラートが発生するとその本文にあった注文を行います。

■テスト方法

画像19

Chrome拡張機能のTalend API Testerなどを使用すると
注文のテストを行えます。

画像10

APIテストページに飛んだ後、
上記の赤枠部分を入力してSendボタンを押すとサーバーにPOSTリクエストが飛び、注文が行えます。

■あとがき

画像20

ここで紹介しているコードはTradingView→MT4での
最低限の取引が行えるレベルのものになります。

Pineのv4ではPlotしたものをアラート本文に含めることができるため、
アラートの項目でLotやTakeProfit、StopLossなど対応すればもう少し複雑な取引なども行えると思います。
そこまでするならMQLで書けばよいとも思いますが・・・

画像9

致命的なエラーに分類されるものが発生した場合はEAを終了させています。
※alert_example.mq4 の ErrorHandlingの中で分類しています。

それなりにエラーハンドリングを行っていますが、
どんな時に発生するエラーなのか分からないものも含まれているため、
全てをカバーはできていないと思います。

今回はMQL4、MT4用のコードになっていますが、
MQL4の中では大した処理は行っていないためMQL5への移植もそこまで難しくはないと思います。

いいなと思ったら応援しよう!