新しいAPI MetaTrader 4が利用可能になりました。 - ページ 6

 
yewnix:

よくわからないんだけど...

注文の送信は一日中できるのですが...

しかし、私はOrderCloseを行う大きな問題を抱えています....


これらの例を教えてください。


.NETラッパーDLLのせいじゃないと思うんだけど。

こんにちは、yewnix!


You can take a look on <Program Files>TradeZone ThatzMT4API Phoenix Short_Sample_MQL4.zip をご覧ください。


このシンプルなMQLコードは、<orderproxy.mqh>を含めると、すべてのオープンオーダーをクローズします。


int hAccount = TZ_LogIn(Login, Password, Server, "", "", "", "");

int Total = TZ_OrdersTotal();


for(i=0;i<Total;i++)

{

TZ_OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

TZ_OrderClose(TZ_OrderTicket(), TZ_OrderLots(), TZ_OrderClosePrice(), 3);

}

よろしくお願いします。

 
TradeZone:

yewnixさん、こんにちは。


You can take a look on C:\Arquivos de Programas/TradeZone AppI, Developer


このシンプルなMQLコードで、<orderproxy.mqh>を含めると、すべての未決済注文を閉じます。


int hAccount = TZ_LogIn(Login, Password, Server, "", "", "", "");

int Total = TZ_OrdersTotal();


for(i=0;i<Total;i++)

{

TZ_OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

TZ_OrderClose(TZ_OrderTicket(), TZ_OrderLots(), TZ_OrderClosePrice(), 3);

}

よろしくお願いします。

私はC#でこれをしようとしています。

私はあなたの関数を 取り、.NET用のDLLラッパーを書きました。

すなわち


double askprice = MT4ApiNet.MarketInfo_MT4(h, "GBPUSD", (int)MT4ApiNet.MarketInfoType.MODE_ASK)

MT4ApiNet.OrderSend_MT4(h, "GBPUSD", (int)MT4ApiNet.OrderType.OP_BUY, 1, askprice, 3, (askprice - 0.0050), (askprice + 0.0050), "My Program", 100, 0).これで完璧です。


これは完璧に動作します。この注文は完璧に表示されます。

さて、MetaTraderから注文番号を取得すると(例:1234を注文番号として使用)、次のようになります。


MT4ApiNet.OrderClose_MT4(h, 1234, 1, MT4ApiNet.OrderClosePrice_MT4(h,1234), 20) とします。


これは注文をキャンセルしません。

注文を循環させ、MT4ApiNet.OrderGet_MT4を実行しても、まだ動作しない。

 

参考までに。

OrderCloseを 行った後、最後のエラーが発生すると...

MessageBox.Show(MT4ApiNet.ErrorDescription_MT4(MT4ApiNet.GetLastError_MT4(h))) と表示されます。


This return General Erro



せめてdelphiでちゃんとしたOrderCloseを表示してくれないかな?

delphiでも私のコードはハングアップします。

 
TradeZone:

こんにちは、jusoさん。


<Program Files>³TradeZone ³TZMT4API ³Developer ³MetaTrader4 API.txt は、あなたが欲しいものを含んでいます。


よろしくお願いします。

こんにちは、TradeZone


迅速な対応に感謝します。私がC++の開発を積極的に行っていたのは8年前ですが、その頃はDLの*.hと*.libがないとAPIは当然実行できませんでした。もし、*.hファイルがあっても*.libがなければ、面倒ではあるが、関数の アドレスを動的に解決することで実行できる。ということで、*.libがないけれども、*.hは自分で作れる。もしかしたら、私が知らないだけで、DLL自体から簡単にlibを作成する方法があるかもしれません。


よろしくお願いします。

Juso

 

TradeZoneです。


Delphiアプリケーションから送信されるOrderClose_MT4コマンドの動作サンプルを掲載していただけませんか?

先に述べたように、私はこれを動作させることができません。


ありがとうございます。

 
バンプ... バンプ...
 

さて、これに対する反応がないので、私はあなたのDLLが実際にどのように動作するかを調べ始めました。

実際にかなり良いアイデアです。

10個のチャートをロードし、それぞれを異なるEAにアタッチします。

これらのEAが実行され、experts/filesディレクトリにファイルが作成されます。

DLLはこれらのファイルを読み込んで、プログラムされたアプリにデータを表示します。

EAは(DLLの呼び出しによって生成された)ファイルの存在をチェックし、それらが存在する場合は、トランザクションを処理し、応答データを返すために他のファイルを作成し、その後DLLによって作成されたファイルを削除するので、トランザクションが完了または失敗したことが分かります。


もし私が間違っていなければ、Login_MT4コマンドから戻ってきたあなたのハンドルは、ランダムに生成されたディレクトリ名へのインデックスにすぎません。この方法で、どのterminal.exeプロセスを制御し、生成されたファイルをどこに置くかを知ることができます。


私はこのすべてについて間違っているかもしれません、私はちょうど私が持っているOrderCloseの 問題を修正したいのです...


しかし、何度も何度もファイルを作成する代わりに...メモリーマッピング(Pair Name_Handleに基づいたメモリーマップの作成/オープン)を使うことを強くお勧めします。

ところで、OrderCloseについて教えてほしいのですが、そうすれば、私自身のEAとメモリーマップDLLインターフェースをコーディングする必要がありません。


以上、このAPIに関する私の分析でした。


乾杯

 

みんな。

私は、このような統合をうまく動作させ、テストしています(このコードではありません)。これはエキスパートによって行われ、C++/Managed C++から.NETモジュールに機能を 公開します。これは、スムーズな取引管理、エラーの報告、リアルタイムの見積もりなどを可能にします。通信はTCPを使用しているので、高速で信頼性があります。

新しいオープンソース取引プラットフォーム(.NETベース、MT4でデータ受信や注文が可能)の一部として、完全無料のオープンソースとして公開される予定です。このプラットフォームを使うか、あるいは単に統合の一部を使うか、それはあなた次第です。

もし興味があれば、手を上げてください、そうすれば詳細をお伝えします。)

プラットフォームは、数日後(10月15日頃)に立ち上げる予定です。

 

Peer2kです。


ナイス!メモリマッピングの代わりにTCPを使おうと思っていたんだ。

もしあなたがコードへのリンクを送ってくれるなら、私はそれを見ても構わないと思っています。

それはあなた次第だけどね :)


乾杯

yewnix@gmail.com

 
hey、peer2k、それは非常にクールだろう、詳細と私に投稿してください、yuryrub@gmail.com。