私は、FOREX市場でいつ売買するかを予測するアルゴリズム(私のものではなく、単にそれを変更しています)に取り組んでいます。注文を開閉したり、注文のパラメーター(ストップロス、最大ストップなど)を動的に更新したり、リアルタイムのティックデータを受け取ったりできるようにする必要があります。
私は1週間以上研究を続けてきましたが、成功していません。
私が得た最も近いものは JavoNet と Mt4 Api を使用しています
DLLJavaにインポートして、MQL4関数を使用しました。これはAccountBalance()
でしたが、これにより0.0
が返されました。アカウントの残高ではなく、MT4クライアントのコードと設定をいじりましたが、まだうまくいきませんでした。
Q0:誰かが私を正しい方向に向けることができますか?
私は自動化されたFOREX取引に不慣れですが、MT4サーバーを備えたブローカーがどこかにあり、Windowsマシン上のMT4クライアントを使用してそのサーバーに接続しています。
Q1:この場合、APIをクライアント側ではなくサーバー側で動作させる必要がありますか?
これまでに試したこれらのDLLはすべて、私のマシンのMT4クライアントソフトウェアで使用されています。
FIX-ProtocolとZeroMQについても読んでいます。
Q2:これらは何らかの方法で私の目標を達成するのに役立ちますか(JavaとMT4 DLLの間にいくつかのブリッジを作成する代わりに) )?
A0:はい、忘れずにRESTとFX-tradingドメインの同期ブロックチェーン
A1:まあ、典型的な方法ではありません。 MetaTraderサーバーは、ブローカー側のシステムの独自仕様のスイートであり、それらのAPIは、一部のサードパーティ統合を可能にするために開示されていません。
A2:FIX-Protocolは、業界標準のLPインターフェイスのリンガフランカです。 。機関投資家との関係を結んでいる場合FIXプロトコルGWYポート。これにより、マーケットへのAレベルのアクセスが提供され、取引ツールが統合されます。これが当てはまる場合は、MT4インストルメンテーションについては忘れてください。プライムタイムのリズムはMT4ターミナルのローカルホスト処理アーキテクチャ(サブミリ秒TimeDOMAINの解決は一般的ですが、MQL4はマルチスレッド並行/より優れた並列プログラムスケジューリング設計を直接サポートしていません)。 FIX-Protocolイベントは、グラフの最初の[ms]列から始まる「前」の左端の、上の図の外にあります。
ZeroMQは、MQL4の制限からさらに設計を解放するのに役立ちます。 MQL4/ZeroMQ/ML-AI-predictors/GPU処理インフラストラクチャが登場する分散システムに関する他の投稿を読んでみたいと思います。
MQL4/MQL5
のワイルドワールドをお楽しみください
興味がありますか?他を読むのと同じようにMQL4 、 ZeroMQ分散処理 および low -latencyトレーディングポスト
当然MT5プラットフォームでMQL5を使用してエキスパートのコーディングを開始しましたが、アプリケーションの複雑さの増加に伴うアプリケーションの管理の難しさは高いことを認めざるを得ません。ガベージコレクターが欠落していることが原因であるだけでなく、もちろん新しいインスタンスを削除する必要があるだけでなく、JavaはMQL5には本来備わっていない強力なデータ構造と構文のセットを提供します。最後に大事なことを言い忘れましたが、コミュニティと利用可能なサードパーティのライブラリについて話していると、JavaとMQL5の間にはわずか1年の距離があります。つまりJava側でJSON変換用のライブラリを見つける必要がある場合、MQL5コミュニティでは自分で変更しなければならないごみだけを見つけました。
そのため、MQL5の専門家のコーディング(もちろん単純なものではありません)に何度も失敗した後、Java MT5プラットフォームのファサード。同じAPI、同じ基本イベントなど。盲目的な道に行き詰まっていると何度も思いましたが、コーディングを続け、最終的にそれを実行して、本当に確かな結果を得ました。当然、RESTインターフェースはパフォーマンスを大幅に低下させ、同じローカルホストで実行されているTomcatとMT5を使用した場合でも、各リクエストはマイクロ秒ではなくミリ秒のオーダーですが、反対側ではこれだけが減少しますこのアーキテクチャの適合性は、まったく役に立たないわけではありません。
スカルスペリングやあらゆる種類の高頻度取引のような戦略は、このようなシナリオには適していません。逆に、たとえ1日のうちの戦略であっても、短期間で問題なく実装できる場合もあります。最後に重要なことですが、サーブレットコンテナーを呼び出すためにWebRequest()MQL5メソッドを使用する必要はありません。OSからwininet.dll(Windowsについて話している)をインポートすることが可能で、ストラテジーテスターは、戦略はMQL5でコーディングされていますが、おそらく少し遅くなります。要約すると、FX取引プラットフォームのJavaファサードアプローチはそれほど皮肉ではありません。全体的なシナリオをコンテキスト化せずにヌードパフォーマンスのみを引用すると、議論に直面する単純なアプローチになります。
ティック情報を収集して注文をオープン、更新、またはクローズするには、mt4サーバーAPIを使用できます。
このURLを確認してください。
http://mtapi.online/#overlappable-4
多分あなたはあなたが望むものを見つけるでしょう。
そして、私もmt4サーバーAPIを持っています。質問があれば更新してください。
MT4とJavaアプリケーションの間で同期メッセージを送受信する必要がある場合、このシナリオでは高速応答が重要であるため、RESTが最善のアプローチです。メッセージキューソリューションZeroMQのように非同期ソリューションに適しているため、役に立ちません。RESTアプローチを選択したら、MQL4 WebRequest()
を使用してJavaアプリケーション。