シンプルですが、制限があります。
MetaTrader Terminal 5 はコード実行環境であり、外部 URL ターゲット (許可された URL として明示的に構成されている場合) と、HTTP/HTTPS
ポートを介して両方のプロトコルを介して80/443
それぞれ通信できます。
string aCookieHOLDER = NULL,
aHttpHEADERs;
char postBYTEs[],
replBYTEs[];
int aRetCODE;
string aTargetURL = "https://api.myjson.com/bins/56z28";
/* to enable access to the URL-> pointed server,
you should append "https://api.myjson.com/bins/56z28"
to the list of allowed URLs in
( Main Menu -> Tools -> Options, tab "Expert Advisors" ):
*/
ResetLastError(); // Reset the last error code
int aTIMEOUT = 5000; // less than 1 sec. is NOT
// enough for slow Internet connection
aRetCODE = WebRequest( "GET",
aTargetURL,
aCookieHOLDER,
NULL,
aTIMEOUT,
postBYTEs,
0,
replBYTEs,
aHttpHEADERs
);
if ( aRetCODE == EMPTY ) // Check errors
{ Print( "Error in WebRequest(). Error code = ", GetLastError() );
}
else
{ // Load was successfull, PROCESS THE STRING ... assumed to be a JSON
}
コードに示されているように、この関数を使用するには、[オプション] ウィンドウの [Expert Advisors] タブにある許可された s のリストに、アプリオリにWebRequest()
必要なすべての s (サーバー) のアドレスを追加する必要があります。サーバー ポートは、指定されたプロトコルに基づいて自動的に選択されます - " " および" " (無料のオプションではありません...)。URL
URL
80
http://
443
https://
WebRequest()
関数は同期的です。つまり、プログラムの実行を中断/ブロック (!) し、要求された URL からの応答を待ちます。応答を受信する際の遅延が大きくなる可能性があるため、インジケーターからの呼び出しには関数を使用できません。これは、インジケーターが 1 つのシンボルのすべてのインジケーターとチャートによって共有される共通のスレッドで実行されるためです。シンボルのチャートの 1 つでインジケーターのパフォーマンスが遅延すると、同じシンボルのすべてのチャートの更新が停止する場合があります (!!!!)。
Expert Advisors
この関数は、およびからのみ呼び出すことができますscripts
。これらは独自の実行スレッドで実行されるためです。から関数を呼び出そうとすると、Custom Indicator
エラーGetLastError()
が返されます4060
–"Function is not allowed for call".
WebRequest()
ストラテジーテスターでは実行できません。
悪いニュース?
これらすべてがプロジェクトにとって悪いニュースのように聞こえる場合でも、あきらめないでください。コードは DLL 関数を呼び出すことができるため、コードとスムーズに連携し、本番システムで上記の制限のいずれも含まないMQL
、公平で分散型のノンブロッキング コミュニケーターを統合できます。MQL