JavaからIP経由でMT4へ注文を送信

 

こんにちは。

他のコンピュータ(Javaアプリが動作している)からIP経由でMT4に簡単な注文(BUY, SELL, CLOSEだけ)を送る方法はありますか?

双方向の通信は必要なく、単方向の通信でいいです。

よろしくお願いします。

 
Mariop: 他のコンピュータ(Javaアプリが動作している)からIP経由でMT4に簡単な注文(BUY、SELL、CLOSEのみ)を送る方法はありますか? 双方向通信は必要なく、単方向通信でよいです。

しかし、プロセス間通信のためのインターフェースは、組み込みで用意されているものではないので、コーディングが必要です。そのコーディングには知識と経験が必要で、あなたのような初心者が簡単に取り組めるようなものではありません。

そこで、フリーランスの セクションに移動して、資格のある人に依頼することになります。

 
:)ご回答ありがとうございます。
私は初心者ではありません。何年か前にTradePlatform.NETを使ってC#でもっと複雑なことをしましたが、今回はJavaプログラムから注文を送る必要があります。 もし、私が尋ねた方法でMT4が注文を受け取ることができる方法があれば、もっと興味深い答えを待っています。
 

すでに最も適切な答えを出していますよ。ネットワーク上のファイルを通信手段として使用することもできますが、その場合、速度が遅くなり、面倒です。

この質問をされたということは、MetaTrader/MQLのプログラミング環境に関しては、比較的MQL/MetaTraderに習熟されていないのでしょう。なぜなら、もしあなたがMQLとWinAPIに非常に精通しているならば、チャンネル、名前付きパイプ、TCP/IPなどによる様々なIPCソリューションについて既に知っているはずだからです。- そのほとんどはDLLライブラリ経由で実装されていますが、必ずしもそうとは限りません。

 
JavaからMT4に接続する最も簡単な方法(簡単ではありませんが)は、ソケットを使用することです。コードベースや記事にMQLのサンプルコードがあります。
 
Ovo:
JavaからMT4に接続する最も簡単な方法(簡単ではありませんが)は、ソケットを使用することです。MQL用のサンプルコードがコードベースと記事にあります。

私はJavaの経験はほとんどありませんが、2つのコンピュータが同じローカルネットワーク上にある場合、MQL4がFileOpen()を介してサポートしている名前付きパイプは可能で、よりシンプルになるかもしれません。

http://stackoverflow.com/questions/634564/how-to-open-a-windows-named-pipe-from-java

 
jjc:

私はJavaの経験はほとんどありませんが、2つのコンピュータが同じローカルネットワーク上にある場合、MQL4がFileOpen()を介してサポートしている名前付きパイプは可能で、よりシンプルになるかもしれません。

http://stackoverflow.com/questions/634564/how-to-open-a-windows-named-pipe-from-java

実は、Javaで名前付きパイプを使った経験はありませんが、ソケットはJavaでは非常に一般的です。また、提供されたリンクでは、Javaから名前付きパイプを作成することはできませんが、既存のものに接続するだけで、ネットワーキングのソリューションではなく、プロセス間接続のみを考慮しているようです(互換性があるかどうかは不明です)。

 
jjc:

私はJavaの経験はほとんどありませんが、2つのコンピュータが同じローカルネットワーク上にある場合、MQL4がFileOpen()を介してサポートしている名前付きパイプは可能で、よりシンプルになるかもしれません。

http://stackoverflow.com/questions/634564/how-to-open-a-windows-named-pipe-from-java


最初は2台のコンピュータは同じLAN上にありますが、インターネットを通しても動作させることができれば面白いでしょう。しかし、そうですね、今は同じLAN上にあれば十分でしょう。


オボ です。
JavaからMT4に接続する最も簡単な方法(簡単ではありませんが)は、ソケットを使用することです。


そうですね。mt4-zeromqを使ったものが一番いいようですが、それを使って取引を実行する例をまだ見つけることができません。これは、(¿)遅延がなく(?)、Linux環境で使用できるので、これを行うための最良の方法かもしれないと思うので、これに関する簡単なサンプルコードがあれば、感謝します。

しかし、私が見ている主な問題は、やはり遅延です。似たようなものを開発したとき、逆方向(MT4が外部サーバーとやりとりする)には、MT4のマーケットティック間に新しい情報がなかったので、そのような問題はありませんでしたが、この場合、MT4がティック間で注文を受信(そしてそれを実行)できるようになるのかが分かりません。問題にはならないのでしょうか?それとも、私の見落としで、問題にならないのでしょうか?

 
Ovo:

実は、私はJavaで名前付きパイプを使った経験がありませんが、ソケットはJavaでは非常に一般的です。さらに、あなたが提供したリンクは、Javaから名前付きパイプを作成することはできませんが、既存のものに接続するためにのみ、彼らはネットワリングソリューションではなく、プロセス間接続のみを考慮したように見えます(互換性があるかどうか、見当もつきません)。

"名前付きパイプ "は、まずMT4側でWinAPI関数を呼び出して作成する必要があります。そうして初めて、JAVAで標準ファイルとして使用できるようになります。それはOPがまさに望んでいることなので問題ないはずですが、LANのソリューションとしては理想的としか言いようがありません。

一方、ソケットは、LANとWANの両方のソリューションに最適ですが、MT4が簡単に処理できるようにするために、WinAPI用のDLLラッパーと追加サポート関数が必要になります。

しかし、OPは、可能な解決策の情報がたくさんあるため、「指に任せて歩く」だけでよいのです。Named Pips、Mapped Files、Socketなど、どの方法が一番自分に合っているかを選択すればいいのです。
 
Mariop: しかし、私が見ている主な問題は、やはり遅延です。同じようなものを逆方向(MT4が外部サーバーとやりとりする)に開発したときは、MT4のマーケットティック間に新しい情報がなかったので問題はありませんでしたが、この場合、MT4がどのようにしてティック間で注文を受信(そして実行)できるのかが分かりません。問題にはならないのでしょうか?それとも、私が見落としていて、問題にならないのでしょうか?

ティックに依存しないOnTimer() イベントハンドラを使用することで、ティックを受信することができます。

Mariop です。私が見つけた最良の解決策は、mt4-zeromqを使用するものだと思います。

サードパーティのライブラリに依存しないようにしましょう。MT4の処理を容易にするために、サポート関数を 追加した独自のDLLをコーディングしてください。DLLはCでコーディングし、C#は依存性があり、Cほど効率的ではないので使わないでください。

また、要件に適した独自のメッセージ形式/プロトコルを考案してください。コンパクトで効率的なものにし、必要であればセキュリティのために暗号化することも必要です。

 
FMIC:

サードパーティライブラリに依存しないようにしましょう。MT4の処理を容易にするために、サポート関数を追加した独自のDLLをコーディングしてください。DLLは、C#ではなくCでコーディングしてください。C#は依存性があり、Cほど効率的ではありません。

また、要件に適した独自のメッセージ形式/プロトコルを考案してください。コンパクトで効率的なものにし、必要であればセキュリティのために暗号化することも必要です。

最初の回答より、もっと興味深い回答がありましたね。私はあなたに完全に同意し、それらは本当に良いアドバイスです。私は数年前にMQLをやめ、自分のプラットフォームを開発しました(他のプラットフォームにはない特定の機能が本当に必要だったのですが、そのために膨大な時間を費やす気分ではありませんでした)。今、私はMT4のみで動作するブローカーと協力し始めるつもりなので、それに接続するためのブリッジを構築する必要があります。そんなわけで、一刻も早く動作させなければと焦っています。


FMIC

受信ティックに依存しないOnTimer() イベントハンドラを使うことで!?


本当ですね。ありがとう。覚えてませんでした。実際には、注文をほぼ即座に実行する必要があるので、完全に問題を解決することはできませんが(この方法では、1秒ごとにしか確認できないと思いますが、少なくとも毎ティックでは ありません)、確かにこれを使って簡単に一時的なソリューションを構築することができます。

繰り返しになりますが、良いアドバイスです ;)

理由: