私は初心者ではありません。何年か前にTradePlatform.NETを使ってC#でもっと複雑なことをしましたが、今回はJavaプログラムから注文を送る必要があります。 もし、私が尋ねた方法でMT4が注文を受け取ることができる方法があれば、もっと興味深い答えを待っています。
JavaからMT4に接続する最も簡単な方法(簡単ではありませんが)は、ソケットを使用することです。MQL用のサンプルコードがコードベースと記事にあります。
私はJavaの経験はほとんどありませんが、2つのコンピュータが同じローカルネットワーク上にある場合、MQL4がFileOpen()を介してサポートしている名前付きパイプは可能で、よりシンプルになるかもしれません。
http://stackoverflow.com/questions/634564/how-to-open-a-windows-named-pipe-from-java
私はJavaの経験はほとんどありませんが、2つのコンピュータが同じローカルネットワーク上にある場合、MQL4がFileOpen()を介してサポートしている名前付きパイプは可能で、よりシンプルになるかもしれません。
http://stackoverflow.com/questions/634564/how-to-open-a-windows-named-pipe-from-java
実は、Javaで名前付きパイプを使った経験はありませんが、ソケットはJavaでは非常に一般的です。また、提供されたリンクでは、Javaから名前付きパイプを作成することはできませんが、既存のものに接続するだけで、ネットワーキングのソリューションではなく、プロセス間接続のみを考慮しているようです(互換性があるかどうかは不明です)。
私は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がティック間で注文を受信(そしてそれを実行)できるようになるのかが分かりません。問題にはならないのでしょうか?それとも、私の見落としで、問題にならないのでしょうか?
実は、私はJavaで名前付きパイプを使った経験がありませんが、ソケットはJavaでは非常に一般的です。さらに、あなたが提供したリンクは、Javaから名前付きパイプを作成することはできませんが、既存のものに接続するためにのみ、彼らはネットワリングソリューションではなく、プロセス間接続のみを考慮したように見えます(互換性があるかどうか、見当もつきません)。
"名前付きパイプ "は、まずMT4側でWinAPI関数を呼び出して作成する必要があります。そうして初めて、JAVAで標準ファイルとして使用できるようになります。それはOPがまさに望んでいることなので問題ないはずですが、LANのソリューションとしては理想的としか言いようがありません。
一方、ソケットは、LANとWANの両方のソリューションに最適ですが、MT4が簡単に処理できるようにするために、WinAPI用のDLLラッパーと追加サポート関数が必要になります。
ティックに依存しないOnTimer() イベントハンドラを使用することで、ティックを受信することができます。
サードパーティのライブラリに依存しないようにしましょう。MT4の処理を容易にするために、サポート関数を 追加した独自のDLLをコーディングしてください。DLLはCでコーディングし、C#は依存性があり、Cほど効率的ではないので使わないでください。
また、要件に適した独自のメッセージ形式/プロトコルを考案してください。コンパクトで効率的なものにし、必要であればセキュリティのために暗号化することも必要です。
サードパーティライブラリに依存しないようにしましょう。MT4の処理を容易にするために、サポート関数を追加した独自のDLLをコーディングしてください。DLLは、C#ではなくCでコーディングしてください。C#は依存性があり、Cほど効率的ではありません。
また、要件に適した独自のメッセージ形式/プロトコルを考案してください。コンパクトで効率的なものにし、必要であればセキュリティのために暗号化することも必要です。
最初の回答より、もっと興味深い回答がありましたね。私はあなたに完全に同意し、それらは本当に良いアドバイスです。私は数年前にMQLをやめ、自分のプラットフォームを開発しました(他のプラットフォームにはない特定の機能が本当に必要だったのですが、そのために膨大な時間を費やす気分ではありませんでした)。今、私はMT4のみで動作するブローカーと協力し始めるつもりなので、それに接続するためのブリッジを構築する必要があります。そんなわけで、一刻も早く動作させなければと焦っています。
受信ティックに依存しないOnTimer() イベントハンドラを使うことで!?
本当ですね。ありがとう。覚えてませんでした。実際には、注文をほぼ即座に実行する必要があるので、完全に問題を解決することはできませんが(この方法では、1秒ごとにしか確認できないと思いますが、少なくとも毎ティックでは ありません)、確かにこれを使って簡単に一時的なソリューションを構築することができます。
繰り返しになりますが、良いアドバイスです ;)
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
こんにちは。
他のコンピュータ(Javaアプリが動作している)からIP経由でMT4に簡単な注文(BUY, SELL, CLOSEだけ)を送る方法はありますか?
双方向の通信は必要なく、単方向の通信でいいです。
よろしくお願いします。