記事についてのディスカッション

 

新しい記事「MetaTrader5のWebSocket」はパブリッシュされました:

MQL5 APIが更新されてネットワーク機能が導入される前は、MetaTraderプログラムでは、WebSocketベースのサービスに接続してインターフェイスする機能が制限されていました。しかしもちろん、これはすべて変わっています。本稿では、純粋なMQL5でのWebSocketライブラリの実装について説明します。WebSocketプロトコルの簡単な説明とともに結果のライブラリの使用方法に関する手順のガイドが提示されます。

以下は、サーバーに接続しているときに実行されているプログラムのビデオです。


作者: Francis Dube

 
素晴らしい記事だ。MT5がネイティブのウェブソケットを サポートする時が来たようだ。
このコードがMT5の標準インクルードファイルとして含まれることを望む。
あるいは、パフォーマンス上の理由から、MT5がネイティブのウェブソケットAPIを提供することを望む。

ご尽力に感謝する。
 
"The release folder contains prebuilt dll and .exe files available for immediate use."

githubのページにあるReleaseフォルダをお忘れですか?)

 
MetaQuotes:

MetaTrader 5のWebSocketが 公開されました:

著者:Francis Dube

WebSocketは、通常の高速で正しい実装であっても、かなり気まぐれなものです。MQLで作るのは禁忌だ。

端末の開発者から提供されるか、外部のDLLによって提供されるべきである。

 
なぜ必要なのか?なぜWebsocketが 必要なのか、通常のMTと比べてどのような機能が向上するのか。定量的または定性的な改善の例を挙げてください。こんな感じでした。Websocketを使うとこんな感じです。何倍も速くなりました!
 

外部の公開サーバー、特にTLSでテストしましたか?例を見せていただけるとうれしいです。

PS.私はあなたのテストがwss://echo.websocket.orgで動作しないので尋ねているのです(ちなみにログを添付します - なぜそんなに無駄な情報を書くのですか?)純粋なws(ポート80)は大丈夫です。過去にMQL5でWebSocketの実装を実行しようとしたこともあったが、MQLのソケットにはTLSレイヤーの複雑な問題があるため失敗した。それらはまだ解決されていないようだ。というのも、MQLのソケットにはTLSレイヤーの複雑な問題があるからだ。

ファイル:
log.txt  1113 kb
 
Maxim Kuznetsov:

WebSocketは、通常の高速で正しい実装であっても、かなり気まぐれなものだ。MQLではそうすべきではない。

端末の開発者から提供されるか、外部のDLLによって提供されるべきです。

ナンセンスだ。

MQL5ではすべてが完璧に機能している。
 
Renat Fatkhullin:
くだらない。

MQL5ではすべてが完璧に機能する。

MQLについてナンセンスなことはまったくない。TLSには問題があったし(それについてはフォーラムに書いたが、解決策は待っていなかった)、今もある。記事の例はうまくいきません。オリジナルの英語記事にログを添付しました

Discussion of article "Websockets for MetaTrader 5"
Discussion of article "Websockets for MetaTrader 5"
  • 2020.11.25
  • www.mql5.com
New article Websockets for MetaTrader 5 has been published: Author: Francis Dube...
 
Renat Fatkhullin:
くだらない。

MQL5ではすべてが完璧に機能する。

そこには古いwssの問題がある:標準関数のSocketIsReadable()
それはバイパスするための初歩的なものですが、この関数はありません。

uint len = 1024; /SocketIsReadable(ソケット);


 
Roman:

そこには古いwssの問題がある:標準関数SocketIsReadable()
回避策は初歩的なものだが、すでにこの関数がない。

何か正当な理由があるのでしょうか?マジックナンバーとは何なのでしょうか?また、例えば長さ256や1500のメッセージでは問題ないのでしょうか?

 
Roman:

そこには古いwssの問題がある:標準関数SocketIsReadable()
回避策は簡単だが、すでにこの関数なし

あなたは、単にこの関数を理解し、使用する方法を知らない

この関数は入力バッファの使用可能なバイト数を即座に返すだけで、ソケットが生きているかどうかは教えてくれない。この関数は非常に重要であり、同期待ち状態にならず、プログラムの制御を失うことなくデータを部分的に読み出すことができる。

また、TLS関数も正しい。TLS関数は、どのように、どのような順序で使うかを知っている訓練されたユーザーのために 用意されている。呼んで終わり」という人のためのものではないのだ。


それだけでなく、ソケットとTLSの関数は、ターミナルがraw/tls/https接続で使っているものと同じものだ。つまり、すべて問題なく動作する。これらの同じ実装は、私たちの高負荷ソリューションでも動作します。

生のネットワーク関数は初心者向けではないし、素朴な使い方でもない。ネットワークの相互作用の原理と特殊性を十分に理解する必要があります。また、TLSについて話しているのであれば、ハンドシェーク・プロセスの処理方法とシーケンスについてだ。