記事"MetaTrader5 と Python インテグレーション: データの受信と送信"についてのディスカッション - ページ 11

 
ありがとう。この記事は素晴らしい。とても助かったよ。
 



ただ、なぜOnTick()の中でsocket=SocketCreate()とSocketClose()を呼び続ける必要があるのでしょうか?


ソケットのオープン/アライブを維持しないのでしょうか?というより、ソケットをオープン/アライブに保つことは可能ですか?

 
Ernesto Che 描画するためのデータの リクエストを送信します。あなたの例ではpythonは2つの値を返しますが、私はそれぞれ3つの座標点を持つ最大12の異なる構造体のデータを返さなければなりません。
最初は、mt5が一度にすべての構造を記述した長い文字列を返さないという事実に行き詰まりました。いくつかの短いクエリを通して交換を行った。すべてうまくいっているように見えるが、ときどきうまくいかないことがある。
タイムアウトの設定に問題があるようです。解決策を見つけるための方向性を教えてください。
よろしくお願いします。

こんにちは!私もソケットを上げていました。私はpythonでインジケーターを書いています。mt5からたくさん、好きなだけデータを取りますが、mt5にデータを返すのはそう簡単ではありません。ソケットでは、100個までの小さな文字列を送信することができます。Python->MT5間のデータ交換について、ソケット以外にどのようなソリューションがありますか? また、Python->MT5間のデータ交換について、Web/インターネットリクエスト以外にどのようなソリューションがありますか? このためにMySQL DBを上げたくありません。PythonからMT5に約40の通貨ペアと1000の再計算された読み取り値の履歴を転送し、さらにMT5でインジケータのラインを構築することについて話しています。そのため、1秒に1回文字列で送信される最後のバーだけでなく、インジケータのすべての行を見たいと思っています。
どなたか何か便利なアドバイスをいただけないでしょうか?

TCP/IPソケット - MT5はいずれにせよ1つの文字列を受信し、それは30,000のデータに適合しません...。jasonフォーマットでも1文字列変数の限界は100文字列までです。
Python-->MySQL-->MT5

このようなアイデアも思いつきました:

Pythonのmultiprocessing.shared_memoryとMQL5のWinAPIを使えば、メモリから直接データを読むことができる。
 
Alex Renko #:
Python->MT5間のデータ交換のウェブ/インターネット・リクエスタを除いて?MySQL DBを持ち出したくない

「MT5にはSQLiteが 組み込まれていますし、Pythonにも当然SQLiteが あります。

ソケットを使って必要なもの(シグナル、アラートなど)を迅速に報告し、ビッグデータをSQLiteに入れることができます。つまり、pythonでは必要なものをすべてデータベースに入れ、"データ更新 "ソケットで笛を吹く。そしてMQLでは、その笛を合図にデータベースを読み直すことができる。

データベース自体はフレームディスクに保存できる。

 
Maxim Kuznetsov #:

「MT5にはSQLiteが 組み込まれている。

ソケットを使って必要なもの(シグナル、アラートなど)を迅速に報告し、ビッグデータをSQLiteに入れる。つまり、pythonでは必要なものすべてをデータベースに入れ、"データ更新 "ソケットで笛を吹く。そしてMQLでは、その笛を合図にデータベースを読み直すことができる。

データベース自体はフレームディスクに保存できる。

なるほど、ご回答ありがとうございます。
MetaTrader 5は独自のプログラミング言語MQL5を 使用しており、孤立したプロセスで実行されます。このため、低レベルAPIを使用する他のアプリケーションのように、オペレーティングシステムの共有メモリと直接やり取りすることはできません。

シェルの中のシェル......。マック用のネイティブ・バージョンを作れないまま20年...。

 
Alex Renko #:

ご回答ありがとうございます。
MetaTrader 5は独自のプログラミング言語MQL5を 使用しており、孤立したプロセスで実行されます。このため、低レベルAPIを使用する他のアプリケーションのように、オペレーティングシステムの共有メモリと直接やり取りすることはできません。

シェルの中のシェル......。マック用のネイティブ・バージョンを作れないまま20年...。

DLLを使うことは誰も禁じていない。

メモリを直接検索することもできる(おそらく速くはない :-))。

あるいは、インメモリ・キーバリューDBのような効率的な中間ソリューションもある。

ほとんどの場合、ブレーキとボトルネックはPython側にあります。

 
私の場合、動作しない例 誰か理由を知っていますか? 私はオプション127.0.0.1:9090に設定 私はpython socketserver.pyを実行し、EA socketclientEA.ex5を実行(charをucharに修正した後)それを実行しますが、私はこのエラーを再実行します。
2025.10.09 10:41:44.665 socketclientEA (#GDAXIm,H1) 接続 localhost:9090 エラー 4014