WebRequest
指定されたサーバーにHTTPリクエストを送信します。
この関数は2つのバリアントがあります。
関数書式(シンプルなリクエスト送信):
Content-Type:application/x-www-form-urlencodedヘッダを使用した"key=vaule"タイプのシンプルなリクエスト送信
関数書式(任意のタイプのリクエスト送信):
様々なWebサービスとより柔軟な相互作用のヘッダーのカスタムセットを指定するリクエスト送信
■引数
引数名 |
初期値 |
I/O |
詳細 |
method |
- |
In |
HTTPメソッド
|
url |
- |
In |
URL
|
headers |
- |
In |
改行("\n","\r")で区切られたリクエストヘッダのタイプ(key:value)
|
cookie |
- |
In |
Cookie値
|
timeout |
- |
In |
タイムアウト(msec単位)
|
data[] |
- |
In |
HTTPメッセージ本体の配列
|
data_size |
- |
In |
data[]のサイズ(バイト単位)
|
result[] |
- |
Out |
サーバーの応答データを含む配列
|
result_headers |
- |
Out |
サーバー応答のヘッダ
|
■戻り値
HTTPサーバーの応答コードを返します。
エラーの場合は-1を返します。
■備考
WebRequest()関数を使用し、
ターミナルオプションの「エキスパートアドバイザー」タブで許可されたURLリストに
必要なサーバーのアドレスを追加します。
サーバーポートは指定されたプロトコルに基づいて自動的に選択されます。
80 :"https://"
443:"https://"
WebRequest()関数は同期です。
これはプログラム実行の一時中断やリクエストサーバーからの応答を待つ事を意味します。
応答受信の遅延が大きくなる可能性があるので、
WebRequest()関数関数はインジケータからの呼び出しには使用できません。
インジケータは1通貨ペアのチャート上の全てのインジケータによって共有される共通スレッドで実行される為、
1通貨ペアのチャートのインジケータパフォーマンスの遅延は、
同じ通貨ペアの全てのチャートの更新を停止します。
インジケータ関数から呼び出そうとした場合、
GetLastError()はエラー4060(
ERR_FUNCTION_NOT_CONFIRMED)を返します。
WebRequest()関数はEAとスクリプトから呼び出す事が出来ます。
EAとスクリプトは独自のスレッドで実行しています。
ストラテジーテスターでは使用出来ません。
サンプルソース(シンプルなリクエスト送信):
void OnInit(){
string cookie=NULL,headers;
char post[],result[];
int res;
string req_url = "https://www.fxcm.co.jp/market/indicators/index.php";
res = WebRequest(
"GET",
req_url,
cookie,
NULL,
5000,
post,
0,
result,
headers
);
if (res == -1) {
Print("WebRequesエラー。 エラーコード =",GetLastError());
MessageBox(
"ターミナルオプションの「エキスパートアドバイザータブ」の設定で\n '"
+req_url
+"' \nのURLを\n「Allow WebRequest for listed URL」のリストに追加して下さい。"
,"HTTPリクエストエラー"
,MB_ICONINFORMATION);
} else {
PrintFormat("ロード成功。 取得ファイルサイズ =%d [KB]",ArraySize(result)/1024);
int filehandle = FileOpen("FXCM_ECOFILE.htm", FILE_WRITE|FILE_BIN);
if( filehandle != INVALID_HANDLE) {
FileWriteArray(filehandle,result,0,ArraySize(result));
FileClose(filehandle);
} else {
Print("FileOpenエラー。 エラーコード=",GetLastError());
}
}
}
サンプルソースを実行すると、取得したWebサイトのデータが"ターミナルディレクトリ\MQL4\Files"に保存されます。
htmlソースコードのみ取得しているので、画像が無かったりレイアウトが異常になっていますが、
htmlソースコードから経済指標のデータを抽出してチャート上に表示させるプログラムの為のデータに使えます。
経済指標のスケジュールをcsvデータで公開しているサイト(英語ですけど)もありますので、
csvファイルを取得した方が経済指標データの抽出は簡単だと思います。
私は
FXCMジャパン証券の経済指標カレンダー
(https://www.fxcm.co.jp/market/indicators/index.php)から、
必要な経済指標データを抽出してEAに組み込んでいます。
FXCMジャパンは楽天証券に買収されましたので楽天証券の経済指標データ
(
https://www.rakuten-sec.co.jp/web/market/calendar/)
を参照。
あとはトレーダーズウェブFXの市場カレンダー
(
https://www.traderswebfx.jp/calendar/
)から
要人発言・債券入札・週間原油在庫の予定を取得しています。
2つ目のバリアントの、任意のタイプのリクエスト送信用のWebRequest関数を使用してみたのですが、
"引数の数が異常です"という事でエラーになりました。
MQL4ではオーバーロードされていないのかもしれません。MQL5専用??
2015/05/25追記:Build 825で実装されました。