質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

MQL

MQL(Meta Quotes Language)は、Meta Trader4(MT4)で用いられるプログラミング用語です。MQLによりEAやインジケーターの作成が可能。C言語で書かれているため、C言語の知識があれば簡単に扱うことができます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

0回答

1875閲覧

一部アプリケーション(MQL5)からのGASの呼出しが404エラーとなる

meshitaka

総合スコア0

MQL4

MQL4とは、MT4(MetaTrader4)で用いられるプログラム言語です。MT4は無料で使えるチャートソフトあり、MQL4を使うことで分析ツールのオリジナルスクリプトの作成ができます。

MQL

MQL(Meta Quotes Language)は、Meta Trader4(MT4)で用いられるプログラミング用語です。MQLによりEAやインジケーターの作成が可能。C言語で書かれているため、C言語の知識があれば簡単に扱うことができます。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

0グッド

0クリップ

投稿2021/07/06 17:58

編集2021/07/06 18:00

前提・実現したいこと

MT4、MT5というFX自動売買用のツールからGASで作成したウェブアプリケーションへHttpsリクエストでアクセスし、スプレッドシートの値を取得するというシステムを構築しております。
自動売買ツールの言語はそれぞれ以下を使用しています。
MT4:MQL4
MT5:MQL5

MT4、MT5のリクエスト先URLおよびリクエスト内容は同じです。

MT4からのリクエストは正常にレスポンスを受信できるのですが、MT5からの呼出しのみ、レスポンスが以下の返却値とともに404エラーとなります。特定のアプリケーションからの呼出しはGoogle側でエラーを返却するなどの制約があるのでしょうか。ネットワーク周りの知見が不足しているため、お詳しい方にご助力いただきたいです。

発生している問題・エラーメッセージ

MT5側のレスポンス内容は以下となります。

2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) res : 404 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) result : <!DOCTYPE html><html lang="ja"><head><meta name="description" content="ウェブ ワープロ、プレゼンテーション、スプレッドシート"><meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0"><link rel="shortcut icon" href="//docs.google.com/favicon.ico"><title>ページが見つかりません</title><meta name="referrer" content="origin"><link href="//fonts.googleapis.com/css?family=Product+Sans" rel="stylesheet" type="text/css" nonce="QcLBj5wqchgMkSTHYCYHOQ"><style nonce="QcLBj5wqchg 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) .goog-inline-block{position:relative;display:-moz-inline-box;display:inline-block}* html .goog-inline-block{display:inline}*:first-child+html .goog-inline-block{display:inline}#drive-logo{margin:18px 0;position:absolute;white-space:nowrap}.docs-drivelogo-img{background-image:url('//ssl.gstatic.com/images/branding/googlelogo/1x/googlelogo_color_116x41dp.png');background-size:116px 41px;display:inline-block;height:41px;vertical-align:bottom;width:116px}.docs-drivelogo-text{color:#000;display:inline-block;opa 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) headers : Access-Control-Allow-Origin: * 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) Cache-Control: no-cache, no-store, max-age=0, must-revalidate 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) Pragma: no-cache 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) Expires: Mon, 01 Jan 1990 00:00:00 GMT 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) Date: Tue, 06 Jul 2021 17:45:28 GMT 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) Content-Type: text/html; charset=utf-8 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) Content-Encoding: gzip 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) Referrer-Policy: origin 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) X-Content-Type-Options: nosniff 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) X-XSS-Protection: 1; mode=block 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) Server: GSE 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) Alt-Svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-T051=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43" 2021.07.07 02:45:27.937 HttpsTestGet (EURUSD,M1) Transfer-Encoding: chunked

該当のソースコード

接続先URL

https://script.google.com/macros/s/AKfycbzPK3PZHrEDJLHuWfa02HC8JYz_gupr7afNJx3vldhzYOQvWF5ZYGqG2A/exec

MQL4(レスポンス値200)

//--- string URL ="https://script.google.com/macros/s/AKfycbzPK3PZHrEDJLHuWfa02HC8JYz_gupr7afNJx3vldhzYOQvWF5ZYGqG2A/exec"; string cookie=NULL,headers; char post[],result[]; int res; string getURL=URL; res=WebRequest("GET",URL,cookie,NULL,500,post,0,result,headers); string resultstr=""; for(int j=0; j<ArraySize(result); j++) { resultstr+=CharToStr(result[j]); } Print("res : "+IntegerToString(res)); Print("result : "+resultstr); Print("headers : "+headers);

MQL5(レスポンス値404)

//--- string URL ="https://script.google.com/macros/s/AKfycbzPK3PZHrEDJLHuWfa02HC8JYz_gupr7afNJx3vldhzYOQvWF5ZYGqG2A/exec"; string cookie=NULL,headers; char post[],result[]; int res; string getURL=URL; res=WebRequest("GET",URL,cookie,NULL,500,post,0,result,headers); string resultstr=""; resultstr=CharArrayToString(result,0,WHOLE_ARRAY,CP_UTF8); Print("res : "+IntegerToString(res)); Print("result : "+resultstr); Print("headers : "+headers);

GAS(共通。doGet()内の戻り値返却箇所のみ抜粋)
MT5からの呼出し時も下記console.logに到達していること、および出力内容に問題がないことを確認済み

//スプレッドシート取得結果をjson変換 var returnValue = JSON.stringify(rowData); //返却値をログ出力 console.log("【PJ_CPF_AuthUserGAS】"+returnValue); return ContentService.createTextOutput(returnValue);

試したこと

MT5からの呼出しの場合も、リクエストは受信され、GASの処理は正常に終了している(MT4からの呼出し時と同じ結果となっている)ことはGASのログ出力より確認済みです。
したがって、GASの処理終了後、Google側のサーバからの返却時に、MT5からの呼出しの場合のみ何らかの理由でレスポンス内容がエラーページに差し替えられていると考えております。

補足情報(FW/ツールのバージョンなど)

MT4:build1335
MT5:build2931

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問