注文(またはポジション)が一部決済されたかどうかを確認することはできますか?
MT4では、部分的にクローズした場合、新しいチケットを持っています。実際、それは新しいエントリーではなく、以前のエントリーです。そこで、このような注文を別にする必要があります。真のマーケットエントリーを示す注文と、部分的なクローズ(新規エントリーではない)の後に表示される注文です。あなたのクラスを使うことは可能ですか?
それとも、注文が完全にクローズするまで、1つのCOrderオブジェクトになるのでしょうか?つまり、部分決済後は新しいCOrderオブジェクトはないのでしょうか?
もしそうなら、注文の合計利益をどのように取得できますか?
また、最初の注文チケット または最初の注文タイプを取得するにはどうすればよいですか?
1.09246で5.00 #1の売り注文を出したとする。次の一部クローズで2.00 #2を1.08896で買い。そして最終的に1.09161で3.00 #3の買いが残っている(実際にはトレイリング・ストップのため)。
これが私のコードだ:
COrders *orders=order_manager.OrdersHistory(); for(int i=order_manager.OrdersHistoryTotal()-1;i>=0;i--) { COrder *order=orders.At(i); if(!CheckPointer(order)) continue; order.OnTick(); if(!order.IsClosed()) continue; if(order.OrderType()!=0 && order.OrderType()!=1) continue;
単純化するために、これら3つの注文をすべてポジションと呼ぶことにする。
IsClosed()メソッドは、ポジションがクローズしたとき(最後の注文#3)にtrueを返す。しかし、ポジションの種類、ポジションの最初の注文チケット、ポジションの建値は どうやって取得すればいいのでしょうか?ポジションの最初の出来高はInitVolume()メソッドで計算できそうです。残りはどうですか?
1.09246で5.00 #1の売り注文を出したとする。次の部分終値2.00 #2を1.08896で買い。そして最終的に1.09161で3.00 #3の買いが残っている(実際にはトレイリング・ストップのため)。
これが私のコードだ:
単純化するために、これら3つの注文をすべてポジションと呼ぶことにする。
IsClosed()メソッドは、ポジションがクローズしたとき(最後の注文#3)にtrueを返す。しかし、ポジションの種類、ポジションの最初の注文チケット、ポジションの建値は どうやって取得すればいいのでしょうか?ポジションの最初の出来高はInitVolume()メソッドで計算できそうです。残りはどうですか?
何をしようとしているのかよく分かりませんが、MQL5でCOrderインスタンスの未実現損益を取得するには、1つの方法として、残りの出来高を取得し、現在の市場価格(買値または売値)とCOrderのエントリー価格との差を乗算し、さらにティック値を乗算します。難しいのは、シンボルのポイントがティックサイズと等しくない場合です(差をティックサイズで割る必要があります)。以前はゴールドもそうでしたが、私の知る限り今は違います。より大きな流動性を提供するブローカーを探した方がよいでしょう。同じCOrderインスタンスが最後まで使用されます。MQL4では、注文チケットを選択してOrderProfit()関数を呼び出すだけです。
When one sends a trade request, there are only two outcomes: processed or not processed. If the trade was not processed, it means that there was no deal, as the trade server was not able to process it for some reason (usually due to errors). Now, if the trade is processed, in MQL5, the client and the server have a deal. In this case, the order can be fully executed or partially executed.
タイムアウトが発生することもあります。つまり、注文が処理されたかどうかわからないということです。もちろん、最終的には注文は処理されるか処理されないかのどちらかですが、ライブ口座でタイムアウトを知って処理することは重要です。
MetaTrader 4にはこのオプションはなく、注文は完全に約定するかしないか(フィルまたはキル)だけです。
...
MQL4では、出来高の計算は簡単です。エキスパートアドバイザーが取引リクエストを送信するたびに、そのリクエストの出来高も含まれ、拒否されるか受け入れられるかのどちらかになります。
これは正確ではありません。MT4は、部分的に満たされた注文を 持つこともできます。もちろん、MT4で主に取引されるFXではまれなはずですが、技術的には起こりうるかもしれません。
一般的に、この記事で提供されているクラスの有用性はわかりません。メインコードやコンパイラのディレクティブに、特定のMT4/MT5が必要だからです。(もしかしたら、さらなる記事で取り上げられているかもしれませんが、私はまだ読んでいません)。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
新しい記事 クロスプラットフォームEA:オーダー はパブリッシュされました:
MT4とMT5は、トレードリクエストで異なるルールを使用しています。この記事では、トレードプラットフォームとバージョンにかかわらず、クロスプラットフォームEAとして稼働する、クラスオブジェクトを使用します。
以下は、EAを実行する際の、プラットフォームのスクリーンショットを示しています。なお、EAは ExpertRemove関数の呼び出し以来、(OnTickハンドラの単一の実行)、そのコードを実行するように、チャートから削除されます。
作者: Enrico Lambino